您的位置 首页 大数据运维

MapReduce 数据处理及 shuffle 的流程,以及各个阶段的先后顺序

MapReduce 数据处理及 shuffle 的流程,以及各个阶段的先后顺序

1、Map阶段

1)读取hdfs上的文件,每个block启动一个maptask,按行读取一个block中的内容。
(2)map函数对数据split拆分,得到数组,组成一个键值对<word,1>
(3)做分区对应多个reduceTask
(4)分区数据,按key分组排序
(5)在map端执行小reduce,一个map中输出<key,times>

2、Rudeuce阶段

  (1) 每个分区对应一个reduce task,他会读取(所有map节点上的maptask)相同分区的所有输出
  (2) reduce Task对接受的所有map输出,排序
  (3) 执行reduce,对数据累加
  (4) 输出到hdfs上

3、shuffle过程

1)MapTask收集我们的map()方法输出的kv对,放到内存缓冲区中
2)从内存缓冲区不断溢写到本地磁盘文件,可能会溢出多个文件
3)多个溢出文件会被合并成大的溢出文件
4)在溢出过程及合并的过程中,都要调用Partitioner进行分区和针对key进行排序
5)ReduceTask根据自己的分区号,去各个MapTask机器上取相应的结果分区数据
6)ReduceTask会取到同一个分区的来自不同MapTask的结果文件,ReduceTask会将这些文件再进行合并(归并排序)
7)合并成大文件后,Shuffle的过程也就结束了,后面进入ReduceTask的逻辑运算过程(从文件中取出一个一个的键值对Group,调用用户自定义的reduce()方法)

原因:因为频繁的磁盘I/O操作会严重降低效率,所以"中间结果"不会立马写入磁盘,而是先存储到map节点"环形缓冲区"

 

1)MapReduce 数据处理流程

 

2)Map 端 shuffle 过程

3)Reduce 端的 shuffle 过程

欢迎来撩 : 汇总all

白眉大叔

关于白眉大叔linux云计算: 白眉大叔

热门文章