2013-12-18 40 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