浅谈MapReduce,mapreduce


         从今天开始,本人将会开始对另一项技术的学习,就是当下炙手可热的Hadoop分布式就算技术。目前国内外的诸多公司因为业务发展的需要,都纷纷用了此平台。国内的比如BAT啦,国外的在这方面走的更加的前面,就不一一列举了。但是Hadoop作为Apache的一个开源项目,在下面有非常多的子项目,比如HDFS,HBase,Hive,Pig,等等,要先彻底学习整个Hadoop,仅仅凭借一个的力量,是远远不够的。所以,我选择了逐个击破的办法,我们都知道,Hadoop中最核心的2个架构体系就是MapReduce+HDFS,一个分布式计算框架+加上分布式文件系统,就构成了一个基本的分布式计算平台,在上面搭配上面Hive,Pig等查询工具,就可以很好的进行数据挖掘,机器学习方面的操作了。今天本人所学习的是大名鼎鼎的MapReduce计算框架,这个思想是Google公司在04年左右的时候,提出来的,在一篇论文中提出来,当时Google公司并没有对此代码进行开源,后来是别人依据此思想进行了实现,并经历过代码的不断的发展,演变,才有了后来的Hadoop平台的诞生。

         也许在很多人看来,MapReduce不就是一个简简单单的Map+Reduce函数嘛,那我只能告诉你,你只明白了它上面中的沧海一粟,背后的许许多多的复杂的原理设计,是一般所无法想象的。这一段,通过一系类的书籍,学习,稍稍形成了我对MapReduce思想的新的看法,我就简单的说说的我的理解。在MapReduce的过程一把分为5个过程,这个稍稍了解Hadoop的人应该都知道:

InputFormat------>Mapper------->Partitioner------>Reducer--------->OutputFormat

一个线性的执行流程。在Hadoop中,已经默认提供了InputFormat,Partitioner,OutputFormat的步骤,所以一般我们只需要重写自己的Map映射方法和Reduce处理函数就可以了。这就是我们通俗我们所说的Hadoop的编程模型

        下面看看在MapReduce中的相关的核心几个技术设计:

       1.Hadoop RPC框架的设计。Hadoop的出现,使得人们开发分布式系统的门槛低了很多,我们只需把更多的时间用在自己的业务逻辑,而不需要关注一些网络通信,容错机制等比较细节的东西。因为这些Hadoop都帮我们处理好了,这就是这个平台的神奇之处。而这里所提到的Hadoop RPC框架就是对于程序的网络请求所做的一完美封装。Hadoop RPC框架是基于Java NIO所设计的,中间还有了Java中的动态代理,还有一些反射机制,因此在处理并发的性能上还是能够接受的。

        2.Hadoop中的作业提交流程。要想学习MapReduce的思想,当然要首先知道在Hadoop中整个作业的执行流程。下面是一张图描述了这个过程:


        3.在Hadoop中,必须知道2个概念JobTracker和TaskTracker.作为Hadoop核心技术之一的JobTracker,里面的启动过程也是一个非常重要的内容,他与TaskTracker的HeartBeat心跳机制,JobTracker和TaskTracker如何保持信息维护。在JobTracker中,会出现土匪任务推测式执行的东西,为了防止个别Task严重脱慢整体,会额外开启一个备用任务。这些都是JobTracker干的事。

        4.TaskTracker作为与JobTracker的另外一种设计,也包了很多的内容。他不仅仅是简简单单的执行任务。他也有自己的一套启动流程。TaskTracker如何将自己当前的信息通过心跳机制发送给Master。TaskTracker内部如何执行由JobTracker发布过来的命令。

        5.Task作为作业的一个任务载体,内部的实现过程也值得我们好好学习。Task分为Map Task 和Reduce Task。Map Task 可以分解为Read,Map,Collect,Spill,Combine,后三步是重点,而Reduce Task 可分解为Shuffle,Merge,Sort,Reduce,Write,其中前三步为重点。

       6.以上3点都是Hadoop中的比较核心的技术,下面介绍几个高级点的知识,Hadoop的性能调优,这个可以从OS角度,从JVM的层次去调,当然可以放低一个角度,从任务和作业的角度去调整参数。在后面的Hadoop的后来的发展演变中,增加了很多安全方面的东西,比如之前任何用户只要知道地址,就可以随便往哪个block上读取数据,这显然是非常危险的,在Hadoop1.0版本左右,增加了第三方的认证方式,同时能够保证向后兼容。

        尽管MR的使用已经非常普遍了,但是他的缺点和不足,也越来越显得明显,他的扩展性让人诟病,所以就有了下一代的MapReduce,俗称Yarn架构。简单一句话,他把MR的资源管理和作业调度给分开了。还能整合多平台的框架,发挥各自的优点,看来对于未来拥有着无限的可能性啊。

相关内容