【问题标题】:How to disable hadoop combiner?如何禁用hadoop组合器?
【发布时间】:2013-12-18 18:35:27
【问题描述】:

在 wordcount 示例中,组合器被显式设置在

job.setCombinerClass(IntSumReducer.class);

我想禁用合并器,以便合并器不处理映射器的输出。有没有办法使用 MR 配置文件来做到这一点(即不修改和重新编译字数代码)?

谢谢

【问题讨论】:

  • 好问题。当您实现ToolRunner 时,它允许您通过-D 标志传递mapreduce 配置参数......但我从未见过Mapper/Reducer/Combiner 类的名称被更改。
  • 让我试着理解你的问题......所以你想要一种方法,以便你可以通过一些外部机制打开和关闭组合器?因此,如果您不首先设置组合器...您将没有组合器要处理...所以,如果您可以澄清您的问题,我可以为您提供更好的答案...跨度>
  • @javadevg 很抱歉造成混乱。 “所以你想要一种方法,以便你可以通过一些外部机制打开和关闭组合器?因此,如果你没有首先设置组合器......你将没有组合器来处理”是的,这是我的问题。

标签: hadoop configuration mapreduce hadoop-yarn combiners


【解决方案1】:

假设这是你的命令行

hadoop jar your_hadoop_job.jar your_mr_driver \
command_line_arg1 command_line_arg2 command_line_arg3 \
-libjars all_your_dependency_jars

这里有以下参数

  • command_line_arg1
  • command_line_arg2
  • command_line_arg3

将分别作为 arg[0]、arg[1] 和 arg[3] 传递给您的 main 方法。假设 arg[0] 和 arg[1] 用于识别输入和输出文件夹。您可以使用 arg[3] 传递一个布尔标志,如 ('1' 或 'true' 或 'yes') 以了解是否要使用组合器并相应地设置组合器。下面的示例(默认...它不会设置组合器类)

if ( "YyesTrue1".contains(arg[3])){
    job.setCombinerClass(IntSumReducer.class);
}

【讨论】:

  • 这将需要您修改 Driver 代码 not map reduce 代码...但是是的,这种方法需要修改代码。由于它的代码覆盖了默认值以引入组合器......检查必须放在那里,因为这是最后一级配置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
  • 2011-12-11
  • 2013-05-09
  • 2015-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多