Mapreduce计算过程
- Mapreduce计算过程
- 分为三个部分,map、shuffle和reduce,map负责对文件切片后的原始数据转化为key-value键值对,shuffle负责将map的结果进行整体分发给reduce作为输入,reduce对不同map任务得到的数据进行合并处理,得到最终的数据文件。
- shuffle过程
shuffle在map端和reduce都参与操作,所以可以分为map shuffle和reduce shuffle两个过程:
map shuffle过程:
从map的输出,需要经过分区、排序、合并过程输出为一个分区有序的文件。
首先根据数据的key值进行分区(默认是hash分区),然后数据写入一个环形缓冲区中,环形缓冲区的实质是一个字节数组,里面包含两部分数据,分别是数据和索引,索引中记录了每个key-value数据的分区等信息,环形缓冲区为100M,默认达到0.8的内存数据量时开始spill溢出到磁盘中,溢出过程前会对环形缓冲区按照partition和key进行排序操作,也就是数据分区聚集,分区内按照key升序排列,如果这个时候设置了combiner的话,会按照相同的key进行合并,然后溢写到磁盘的一个文件中,当数据量很大的时候,会有多个这样的溢出小文件,多个小文件会按照分区进行合并,从而得到一个大的按照分区排序的输出文件。这是map shuffle做的事。
reduce shuffle:
reduce shuffle也有两个过程,分别是复制map数据然后排序合并。
当map输出文件后,会将map输出和机器位置的映射信息报告给application master,同时reduce也会定期向application master询问,获得所需要复制数据的位置。reduce通过http从map端复制相应的数据到自己的内存缓冲区中,当内存数据量达到一定量的时候,进行merge合并,如果设置了combiner,还会combine操作,因为每个map文件已经是有序的,所以多个文件合并的时候采用的是根据key进行归并排序,这样reduce shuffle就产生了一个整体有序的数据块。
reference1
reference2