第一阶段:
把文件进行逻辑切片(确定分成几份)。
默认 切片大小 等于 Block大小(128M),每个切片都由一个Map处理,如果不满128也算作一个切片交由Map处理。(默认切片类:getSplits)
===============================Maptask===================================
第二阶段:
读取切片中的数据并返回<key,value>对。
默认是按行读取数据,每读一行就封装程一个<key,value>的键值对(默认读数据类:TextInputFormat)
一行数据传给map方法处理数据(切割)。
每读取解析出来一个<key,value>,调用一次map方法。
第三阶段:
(正常来说此时应该写入磁盘当中但是会性能低下,所以设置一个内存缓冲区叫做Memory Buffer,先写到缓冲区,到达一定的比例再写到磁盘叫做溢出)
Map输出数据写入内存缓冲区,满了以后溢出变成一个临时文件,继续写继续溢出又变成一个文件,就是下面三个小块。溢出的时候根据key进行排序sort。(根据key字典序排序)。
partions是分区:存储区域或任务划分为多个独立的部分或子区域的过程。
第四阶段:
对所有溢出的文件进行merge合并,成为一个文件。
==============================ReduceTask=================================
第一阶段:ReduceTask会主动从MapTask复制拉取需要自己处理的数据。
第二阶段:把拉取来的数据,全部进行合并merge,再对合并后的数据排序
第三阶段:对排序后的键值对调用reduce方法。键相等的键值对调用一次reduce方法。最后把这些键值对写到HDFS文件中。
因篇幅问题不能全部显示,请点此查看更多更全内容