MapReduce简述、工作流程及新旧API对比
什么是MapReduce?
你想数出一摞牌中有多少张黑桃。直观方式是一张一张检查并且数出有多少张是黑桃。
MapReduce方法则是:
1. 给在座的所有玩家中分配这摞牌。
2. 让每个玩家数自己手中的牌有几张是黑桃,然后把这个数目汇报给你。
3. 你把所有玩家告诉你的数字加起来,得到最后的结论。
MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决海量数据的计算问题。它的核心设计理念是移动计算,而不是移动数据。
MapReduce合并了两种经典函数:
映射( Mapping)对集合里的每个目标应用同一个操作。即,如果你想把表单里每个单元格乘以二,那么把这个函数单独地应用在每个单元格上的操作就属于mapping。
化简( Reducing )遍历集合中的元素来返回一个综合的结果。即,输出表单里一列数字的和这个任务属于reducing。
MapReduce由两个阶段组成: Map和Reduce,用户只需要实现map()和reduce()两个函数,即可实现分布式计算,非常简单。
这两个函数的形参是key、 value对,表示函数的输入信息。
MapReduce在多于10PB数据时趋向于变慢。 Mapreduce原理
执行步骤:
1. map任务处理
1.1 读取输入文件内容,解析成key、 value对。 对输入文件的每一行,解析成key、value对。每一个键值对调用一次map函数。
1.2 写自己的逻辑,对输入的key、 value进行处理,转换成新的key、 value输出。
1.3 对输出的key、 value进行分区。
1.4 对不同分区的数据,按照key**进行排序、分组**。相同key的value放到一个集合中。
1.5 (可选)分组后的数据进行归约。
2.reduce任务处理
2.1 对多个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点。
2.2 对多个map任务的输出进行合并、排序。 写reduce函数自己的逻辑,对输入的key、 values处理,转换成新的key、 value输出。
2.3 把reduce的输出保存到文件中。
1、编写Map和Reduce处理函数
2、配置输入输出路径
3、其他配置,如输出压缩等
1、向JobTracker请求,getNewJobId()
2、检查job的相关愉出路径,提交job以及相关的jar到JobTracker,
相关的libjars是通过distributedCache方式传递到JobTracker。
3、JobClient计算输入分片,把splitMetainInfo写入JobSplit。
4、把job.xml配置文件发送到JobTracker。
5、调用JobSubmissionProtocol的submitjob方法真正去提交作业。
1、JobTracker接收到Client的submitJob()方法调用后,会把调用放到内部队列中,交由TaskScheduler调度。
2、创建一个代表正在运行作业的对象JoblnProgress。
3、JoblnProgress的initTasks()方法的初始化工作:
A.读取作业的分片信息
B.创建Map任务与Reduce任务,为每一个Map Task和Reduce Task生成TasklnProgress对象。
C.reduce的数最由mapred.reduce.tasks属性决定,而map的数量是由输入分片的个数决定的。
1、JobTracker与TaskTracker之间的通信与任务分配是通过心跳机制完成的。
2、TaskTracker会主动向JobTracker询问是否有作业,如果自己有空闲的slot,就可以在心跳阶段得到JobTracker发送过来的Map任务或Reduce任务。
3、TaskTracker->transmitHeatBeat。
4、拷贝所有信息到本地(代码,配置信息,数据分片)。
申请到任务后,,TaskTracker需要做如下事情:
1、拷贝代码到本地。
2)拷贝任务信息到本地。
3)启动JVM运行任务。
A.代码可以查看 TaskTracker->startNewTask->localizeJob,然后调用launchTaskForJob启动taskrunner去执行task。
B.TaskRunner分为MapTaskRunner和ReduceTaskRunner。
1、Task在运行过程中.把自己的状态发送给TaskTracker,由TaskTracker再汇报给JobTracker。
2、任务进度是通过计数器实现的。
1、JobTracker在接收到最后一个任务完成后,才会将任务标志成成功状态。
2、同时会执行把中间结果后删除等操作。
Hadoop2.6.0源码作业提交流程
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/71071.html