图说MapReduce处理数据的过程
下图来源于《Hadoop For Dummies》图书,示例为统计每个航班的飞行航次。
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》
相关推荐
通过实现MapReduce计算结果保存到MySql数据库过程,掌握多种方式保存计算结果的技术,加深了对MapReduce的理解;创建maven项目,项目名称hdfs,这里不再说明。红色部分为增加内容: