💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
*(面试:Combiner 的运行位置及其作用)* <br/> 1. Combiner 是 MR 程序中 Mapper 和 Reducer 之外的一种组件。 2. Combiner 组件的父类就是 Reducer。 3. Combiner 和 Reducer 的区别在于<mark>运行的位置</mark>: ➢ <ins>Combiner 是在每一个 MapTask 所在的节点运行</ins>; ➢ Reducer 是接收全局所有 Mapper 的输出结果; 4. <ins>Combiner 的意义就是对每一个 maptask 的输出先进行局部汇总,以减小网络传输量</ins>。 5. Combiner 能够应用的前提是不能影响最终的业务逻辑(比如求平均值就不能使用),而且,Combiner 的输出 kv 应该跟 Reducer 的输入 kv 类型要对应起来。 6. 自定义 Combiner 实现步骤: ``` 为【MapReduce基本使用 -> WordCount案例 -> WordCount案例代码】这个示例设置Combiner. ``` (1)自定义一个 combiner 继承 Reducer,重写 reduce 方法。 将 WordcountReducer 作为 combiner 在 WordcountDriver 驱动类中指定(也可以自定义 combiner,使用自定 reducer 作为 combiner 的前提是,reducer 的输入和 combiner 的输出类型相同)。 (2)在 Driver 中添加combiner。 ```java // 指定需要使用 combiner,以及用哪个类作为 combiner 的逻辑 job.setCombinerClass(WordcountReducer.class); ``` 运行程序: ![](https://img.kancloud.cn/9d/3b/9d3b75ea9ecc7c8dc712fa3d3f599c31_1198x340.png) ![](https://img.kancloud.cn/7d/e3/7de378f87ac00b812b265e2248a378cd_1203x345.png) 从输出结果上可以分析出,加入 Combiner 之后,会在 Map 端进行局部集合,减少了 Reducer 端拉取数据的数据量。