hadoop:MapReduce之 shuffle过程详解

文章目录

    • shuffle概念
    • 为什么要在map reduce 之间加shuffle?
    • combiner(合并)
    • sort(排序)
    • patittioner(分区)
        • merger三种形式

shuffle概念

shuffle(洗牌之意),Shuffle描述着数据从map task输出到reduce task输入的这段过程.
官方图片
hadoop:MapReduce之 shuffle过程详解_第1张图片

为什么要在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(分区)

.均衡负载,尽量的将工作均匀的分配给不同的reduce。
  2.效率,分配速度一定要快。

merge(使..合并)

merger三种形式

i内存到内存
ii 内存到磁盘
iii磁盘到磁盘

默认情况下第一种形式不启用,让人比较困惑,是吧。当内存中的数据量到达一定阈值,就启动内存到磁盘的merge。与map 端类似,这也是溢写的过程,这个过程中如果你设置有Combiner,也是会启用的,然后在磁盘中生成了众多的溢写文件。第二种merge方式一直在运行,直到没有map端的数据时才结束,然后启动第三种磁盘到磁盘的merge方式生成最终的那个文件

你可能感兴趣的:(#,hadoop)