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 @   追こするれい的人  阅读(152)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示