图说MapReduce处理数据的过程

下图来源于《Hadoop For Dummies》图书,示例为统计每个航班的飞行航次。


图说MapReduce处理数据的过程

A:文件存储到linux系统、windows系统都是以data block的形式来存储。hdfs会把文件分拆成固定尺寸的data blok。

A-->B:HDFS文件系统把预存储的文件拆分成多个数据块(Data Block),每个数据块都有两个副本,即以每个数据块三份的形式存储于HDFS文件系统的不同的data node中。

C:文件在分解成固定尺寸的数据块data block时,每个数据块data block的最后一条记录有可能会被分割到下一个数据块,为了解决这个问题,在进入数据处理的data block都会被重新计算,会记算一个data block中第一条记录、最后一条记录所处的位置,会记录下一个数据块位置,以及上个数据块最后一条记录在下个数据块中的偏移,即input splits。

B-->C:为了保证每个数据块中分割时边界记录的完整性,每个data block被重新计算为input split。

B-->D:在yarn中,每个mapreduce job开启时,yarn中的资源管理器都会创建一个 application master守护进程,来监听mapreduce job的生命周期。application master守护进程会首先向hdfs的namenode节点获取文件做对应的所有data block的位置,并把data blok计算为input split。然后application master守护进程向yarn的资源管理器发送请求处理input split,然后进入了map处理阶段。

C-->E:(map阶段)map函数处理输入分片input split,每次读取分片中的一条记录,该记录以记录偏移k1,记录本身内容v1的键值对形式输入map()。map函数从每条记录中进行抽取,表达为<XX提取词k2,V2>的键值对输出(v2为1)。k2/v2键值对首先缓存于内存,达到一定字节,会被转存到data node的磁盘不同的分区中。

E-->F:(shuffle阶段)shuffle阶段以k2对不同分区的map阶段输出进行聚合,形成为k2为键、一系列k2对应的v2(在此为1)值集合为值的键值对形式。然后以k2键进行排序,并写入到本地磁盘不同的分区。

F-->G:把shuffle阶段不同分区的输出通过网络拷贝到分配有reducer task的data node磁盘的对应分区中。

G-->H:(reduce阶段)reducer函数处理list(<k2,v2值集合>),形成以k2为键,v3为值的键值对。然后输出文件存储到hdfs。

后续学习深入,继续进行修改!!!欢迎指摘!


学习资料:
1,《Hadoop For Dummies》

相关推荐