shuffle概念
shuffle(洗牌之意),Shuffle描述着数据从map task输出到reduce task输入的这段过程.
官方图片
为什么要在map reduce 之间加shuffle?
shuffle期望:
- 完整的从map task 端拉去数据奥reduce端
- 在跨节点拉去数据时,减少网络传输的消耗
- 减少磁盘io对task执行的影响
广义来说:Map的输出到Reduce输入这段称为shuffle过程,由hadoop默认执行,中间执行步骤有Combiner和Partitioner,sort和Merge。 shuffle的执行顺序是Combiner和Partitioner,sort和Merge。的过程
combiner(合并)
i.一个可选的本地reducer,可以在map阶段聚合数据
ii. 可以明显减少通过网络传输的数据量
iii. 使用combiner可以产生特别大的性能提升,并且没有副作用
iv. 不能保证执行,不能作为整个算法的一部分
vi.并不是所有情况下都能使用combiner,combiner使用于对记录汇总的场景(如求和,但是求平均数的场景就不能使用了
sort(排序)
根据哈希码值排序
按照kv键值对升序排序,结果按patition聚集
同一patition按key有序
patittioner(分区)
1.均衡负载,尽量的将工作均匀的分配给不同的reduce。
2.效率,分配速度一定要快。
merge(使..合并)
merger三种形式
i内存到内存
ii 内存到磁盘
iii磁盘到磁盘
默认情况下第一种形式不启用,让人比较困惑,是吧。当内存中的数据量到达一定阈值,就启动内存到磁盘的merge。与map 端类似,这也是溢写的过程,这个过程中如果你设置有Combiner,也是会启用的,然后在磁盘中生成了众多的溢写文件。第二种merge方式一直在运行,直到没有map端的数据时才结束,然后启动第三种磁盘到磁盘的merge方式生成最终的那个文件