MapReduce Combiner 组件(局部聚合)

Combiner 组件的作用

MapReduce 中的 Combiner 组件就是为了避免 MapTask 任务和 ReduceTask 任务之间的过多的数据传输而设置的

  • MapReduce 程序可以在 MapTask 阶段自定义一个 Combiner 组件进行聚合
  • Combiner 的工作机制类似于 Reducer,不同的是只针对一个 MapTask 任务进行聚合(局部聚合)
  • Combiner 组件可以削减 Mapper 的输出,减少传输到 Reduce中的数据量
  • Combiner 组件可以减少网络带宽和 Reducer 的运算负载
设置 Combiner 组件
// 设置maptask端的 局部聚合 Combiner 组件
job.setCombinerClass(MyCombiner.class);
Combiner 组件使用注意事项
  • Combiner 组件没有默认实现,必须用户自定义
  • 并不是所有的 Job 都适用使用 Combiner 组件,只有操作满足结合律的才可以
  • 一般情况 Combiner 组件和 Reducer 进行同样的操作

数据倾斜问题解决方案

步骤一:第一次在 Map 阶段对那些导致了数据倾斜的 Key 加上分区号随机值,这样本来相同的 Key 也会被分到多个 ReduceTask 任务中进行

步骤二:使用 Combiner 组件进行局部聚合,减少传输到 ReducerTask 的数据量,减轻 ReducerTask 的处理压力,节约网络带宽

注:增加ReducerTask 并行度,或者实现自定义分区,将 Key 均匀分配到不同Reducer

posted @ 2021-12-05 20:23  追こするれい的人  阅读(129)  评论(0编辑  收藏  举报