|
13.2 MapReduce: }# x0 U" W* [% x! m! L' S6 p
提到大数据,大多数人首先想到的就是MapReduce。MapReduce使得普通程序员
# E3 p3 _4 f6 n8 U! J/ X' u可以在不了解分布式底层细节的前提下开发分布式程序。使用者只需编写两个称为
o# O3 A+ w6 K5 K1 Z0 U8 iMap和Reduce的函数即可,MapReduce框架会自动处理数据划分、多机并行执行、任
+ U" ?: q1 j( E1 M3 M$ ?4 P务之间的协调,并且能够处理某个任务执行失败或者机器出现故障的情况。Map
( h$ Y8 b. z$ Z, v3 n- i- S9 |Reduce的执行流程如图13-1所示。2 f. c$ r S+ y) s& [' a
图 13-1 MapReduce执行流程
* M9 Y- i& k6 V: }: d P gMapReduce框架包含三种角色:主控进程(Master)用于执行任务划分、调度、9 o- x* c8 U: y. p' x- T1 z
任务之间的协调等;Map工作进程(Map Worker,简称Map进程)以及Reduce工作进
5 q6 `/ I4 Y4 K7 `程(Reduce Worker,简称Reduce进程)分别用于执行Map任务和Reduce任务。
/ `: k3 _1 |# F% i- w+ EMapReduce任务执行流程如下:
9 d' ]1 B! I# e6 f9 d9 K1)首先从用户提交的程序fork出主控进程,主控进程启动后将切分任务并根据. I* x) G5 A0 ]( ]& l
输入文件所在的位置和集群信息选择机器fork出Map或者Reduce进程;用户提交的程) e- z7 ^& w, n2 x. ]3 |, N
序可以根据不同的命令行参数执行不同的行为。) D" k' F+ r& x1 V* ~; Y
2)主控进程将切分好的任务分配给Map进程和Reduce进程执行,任务切分和任. i5 K7 ?+ U! K Q! _: R; s9 q
务分配可以并行执行。
9 l9 Z+ T' K* P: Y% B3)Map进程执行Map任务:读取相应的输入文件,根据指定的输入格式不断地
; n4 X: y. h. B4 B读取<key,value>对并对每一个<key,value>对执行用户自定义的Map函数。
; k1 }% u8 V8 W' M8 N& p4)Map进程执行用户定义的Map函数:不断地往本地内存缓冲区输出中间<4 X# K1 l& ~+ [+ n( N* j7 E
key,value>对结果,等到缓冲区超过一定大小时写入到本地磁盘中。Map进程根据分4 b3 K( D- Q+ d
割(partition)函数将中间结果组织成R份,便于后续Reduce进程获取。' L! y1 s' l. D# G
5)Map任务执行完成时,Map进程通过心跳向主控进程汇报,主控进程进一步% }& w1 i# ~1 i
将该信息通知Reduce进程。Reduce进程向Map进程请求传输生成的中间结果数据。这4 }- e1 H ~: {+ P5 S, D( Y
个过程称为Shuffle。当Reduce进程获取完所有的Map任务生成的中间结果时,需要进2 j% J3 g" r$ c( R2 a% F
行排序操作。' Z0 ]. A- q1 z8 I1 @' w- z
6)Reduce进程执行Reduce任务:对中间结果的每一个相同的key及value集合,' y; r7 R' z6 r2 B' }7 E
执行用户自定义的Reduce函数。Reduce函数的输出结果被写入到最终的输出结果,
, x* Y& Y, f! i# ~' U( Z, M例如分布式文件系统Google File System或者分布式表格系统Bigtable。
% R: U3 n4 l. x2 Z9 L; b5 r0 JMapReduce框架实现时主要做了两点优化:& R* }/ d% B+ ?& p4 Q; C6 I! v
●本地化:尽量将任务分配给离输入文件最近的Map进程,如同一台机器或者同
$ Y( e8 y/ y: x; k一个机架。通过本地化策略,能够大大减少传输的数据量。& c, y/ \& @8 E$ q
●备份任务:如果某个Map或者Reduce任务执行的时间较长,主控进程会生成一- Y$ E$ m& _7 _5 H
个该任务的备份并分配给另外一个空闲的Map或者Reduce进程。在大集群环境下,即 R" ~8 u) J9 i$ T
使所有机器的配置相同,机器的负载不同也会导致处理能力相差很大,通过备份任% d, I/ a% u$ v* P3 ~
务减少“拖后腿”的任务,从而降低整个作业的总体执行时间。2 z) C/ h' ~; |( U
& O( v( [! _2 I. _$ W Y
( H8 L/ r# K8 ? |
|