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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现