2013-12-18 36 views
2

在wordcount示例中,组合器明确设置为如何禁用hadoop组合器?

job.setCombinerClass(IntSumReducer.class);

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

感谢

+0

好问题。当你实现'ToolRunner'时,它允许你通过'-D'标志传递mapreduce配置参数......但是我从来没有见过被改变的Mapper/Reducer/Combiner类的名字。 –

+0

让我试着理解你的问题....所以你想要一种方式,以便你可以打开和关闭组合器通过一些外部机制?因此,如果你没有设置组合器在第一位......你将不会有一个组合器来处理......所以,如果你能确认你的问题,我可以有更好的答案给你... – javadevg

+0

@ javadevg对于混淆抱歉。 “所以你想要一种方式,以便通过外部机制打开和关闭组合器?因此,如果你不把组合器放在第一位......你将不会有一个组合器来处理”是的,这是我的问题。 – polerto

回答

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]传递给您的主方法。假定arg [0]和arg [1]用于识别输入和输出文件夹。你可以使用arg [3]传递一个布尔标志,如('1'或'true'或'yes')来理解你是否想要使用组合器并相应地设置组合器。下面的例子(默认...它不会设置组合器类)

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

谢谢,但这需要我修改地图缩小代码。 – polerto

+0

这将需要您修改**驱动程序**代码**而不是**映射缩减代码...但是,此方法需要修改代码。由于它的代码覆盖了引入组合器的默认值,所以只能将检查放在那里,因为这是最后一级配置。 – javadevg