下图来源于《Hadoop For Dummies》图书,示例为统计每一个航班的飞行航次。node
A:文件存储到linux系统、windows系统都是以data block的形式来存储。hdfs会把文件分拆成固定尺寸的data blok。linux
A-->B:HDFS文件系统把预存储的文件拆分红多个数据块(Data Block),每一个数据块都有两个副本,即以每一个数据块三份的形式存储于HDFS文件系统的不一样的data node中。windows
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处理阶段。app
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键进行排序,并写入到本地磁盘不一样的分区。oop
F-->G:把shuffle阶段不一样分区的输出经过网络拷贝到分配有reducer task的data node磁盘的对应分区中。学习
G-->H:(reduce阶段)reducer函数处理list(<k2,v2值集合>),造成以k2为键,v3为值的键值对。而后输出文件存储到hdfs。spa
后续学习深刻,继续进行修改!!!欢迎指摘!
学习资料:1,《Hadoop For Dummies》