数据岗位面试题更新 2026-08-05

MapReduce 作业执行过程中,网络带宽消耗较大,你认为配置何种 combiner 可以显著降低这种开销?请描述其工作原理及应用注意事项。

数据性能优化风险判断技术原理

考察说明

考查对 MapReduce 中 combiner 优化机制的理解,以及如何通过它减少 shuffle 阶段网络传输量。

回答思路

  1. 【回答框架 1】combiner 是运行在 mapper 输出端的局部 reducer,在 map 任务完成后、数据进入 shuffle 前,对相同 key 的中间结果先做一次合并(如求和、计数、最大值等,要求满足交换律和结合律),从而减少需要通过网络传输到 reducer 的数据量。
  2. 【回答框架 2】使用场景:当中间结果存在大量重复 key 且合并操作具有结合律和交换律时,如词频统计中的计数累加。设置方法是在 job 配置中通过 job.setCombinerClass() 指定 combiner 类。
  3. 【回答框架 3】combiner 的输入输出格式必须与 reducer 一致,因为 combiner 的输出会作为 reducer 的输入。需要注意,combiner 可能被调用零次、一次或多次,因此 combiner 不能有副作用,且必须保证多次合并结果等价于一次合并。
  4. 【回答框架 4】并非所有作业都适合使用 combiner。若合并操作不满足结合律和交换律(如求平均值),直接使用 combiner 会导致结果错误,这种情况下需要自定义逻辑或慎用。
  5. 【回答框架 5】combiner 的主要作用是减少 map 输出到 reduce 阶段的网络传输量,从而降低网络 I/O 和 shuffle 开销,有效提升作业性能。
  6. 【关键点 1】combiner 是 map 端的自定义 reducer,用于预聚合中间结果。
  7. 【关键点 2】必须满足结合律和交换律,否则可能得到错误结果。
  8. 【关键点 3】通过 job.setCombinerClass() 设置,可显著减少网络传输量。
  9. 【关键点 4】combiner 的输入输出类型必须与 reducer 一致,且可能执行多次,需保证幂等。
  10. 【易错点 1】对不满足结合律和交换律的操作(如求平均值)直接使用 combiner 会导致数据错误。
  11. 【易错点 2】误以为 combiner 可以完全替代 reducer,实际上 reducer 必须执行以输出最终结果。
  12. 【易错点 3】忽略 combiner 可能被多次执行,导致副作用问题(如额外计数累加)。