MapReduce的shuffle
1.input map shuffle reduce output
2.shuffle的实现的功能:分区 分组 排序(key字典序)
3.map端的shuffle context.write() 写入到环形缓冲区(内存区域),假设缓冲区设置的是100M,当达到缓冲区的80%的时候,就会溢写出一个小文件,溢出到磁盘之前做了二件事,分区 排序 两个reduce
merge 将小文件进行合并
合并之后 分区内有序
merge之后 maptask结束 ,会通知appmaster我已经结束任务,am通知reduce拉取数据。
reduce shullfe:
reduce启动线程通过网络到每台机器上拉取属于自己的数据
reduce1会拉取属于自己的数据:
将整体分区的数据进行排序
MapReduce shuffle 优化
1.合理设置partition 使用多个reduce处理输出结果
2.减少reducer从map拉取的数据量
(1)将map数据进行压缩(snappy 压缩质量不高 但是读取速度快,) 也可以在reduce输出的时候增加gzip 压缩实现 保证压缩率快速输出
(2)合理使用combiner(减少reducer输入数据量)
spark 的shuffle
ShuffleManager管理
HashShuffleManager
SortShuffleManager
抛弃了HashShuffleManager