1、MapReduce工作流程分析
图 1 MapReduce 工作流程
MapReduce框架适用于大规模数据的并行计算,对于需要在不同机器间频繁同步的应用并不适用。保持节点间数据同步而产生的通信开销会使得系统效率低。MR框架也不适用与低响应延迟的应用。
MapReduce由split,map,combine,shuffle,reduce五个阶段组成。
(1)split:将输入文件按照指定大小切分成split,默认是64M。每一个split对应一个map task。
(2)map:将一个split作为输入,并行执行用户编写的map程序。
(3)combine: 可以看做map端的一个reduce操作。对map端的结果进行合并,减少网络传输数据。combine是否执行有系统决定,只有空闲时才会执行。
(4)shuffle:图中表示为merge。shuffle分为两部分,map端的shuffle和reduce端的shuffle。
Map端的shuffle: map的输出结果首先进行combine操作,然后进行二次快速排序。首先根据数据所属的partition进行排序,然后在每一个partition内,按照key排序。partition数量由reduce决定,不同的partition传给不同的reduce。
Reduce端的shuffle: reduce通过网络获取map task的输出,这称为copy阶段。map输出结果到达reduce端时需要进行排序,排序完成后作为reduce的输入。
(5)reduce:shuffle的输出作为reduce阶段的输入,执行用户编写的reduce函数。
2、MapReduce 容错
(1)将失败的任务再次调度执行,用户可以设置最大重启次数。
(2)为了加快执行速度,Hadoop会在多个机器上执行同一个任务,最先执行成功的为准。(可以通过mapred.map.tasks.speculative.execution进行设置)
(3)黑名单机制:屏蔽异常次数超高的节点