2013-09-26 80 views
1

正如我們所知,新的需求將所有需要的類打包到作業jar並將其上傳到服務器。它太慢了,我會知道是否有一種方法來指定第三部分jar包括執行map-red作業,以便我只能打包出我的類沒有依賴關係。hadoop,如何在嘗試運行mapred作業時包含3part jar

PS(我發現有一個「-libjar」命令,但我不知道如何使用它。這裏是鏈接http://blog.cloudera.com/blog/2011/01/how-to-include-third-party-libraries-in-your-map-reduce-job/

回答

3

那些被稱爲generic options。 因此,爲了支持這些,你的工作應該實現工具。

運行你的工作一樣 -

hadoop jar yourfile.jar [mainClass] args -libjars <comma seperated list of jars> 

編輯:

要實現工具和擴展配置,你做這樣的事情在你的MapReduce應用程序 -

public class YourClass extends Configured implements Tool { 

     public static void main(String[] args) throws Exception { 
     int res = ToolRunner.run(new YourClass(), args); 
     System.exit(res); 
     } 

     public int run(String[] args) throws Exception 
     { 
     //parse you normal arguments here. 

     Configuration conf = getConf(); 
     Job job = new Job(conf, "Name of job"); 

     //set the class names etc 

     //set the output data type classes etc 

     //to accept the hdfs input and outpur dir at run time 
     FileInputFormat.addInputPath(job, new Path(args[0])); 
     FileOutputFormat.setOutputPath(job, new Path(args[1])); 

     return job.waitForCompletion(true) ? 0 : 1; 
    } 
} 
+0

這是我的命令「[admin1 @ tisrv01 workspace] $ hadoop jar ttcnClearness-1.0.0-snapshot.jar /user/zhouuyud/input/input/ns30triplexs-2013-09-11--1633.bz2/user/zhouuyud/output/-libjars ../workspace/lib/*.jar「。但是,我得到一個異常,因爲在main main方法中,我將檢查參數長度,將-libjars xxxx傳遞給main main方法。這樣對嗎? –

+1

你不需要自己處理-libjars選項,ToolRunner會爲你做這件事,並過濾掉上面鏈接通用選項中包含的Hadoop相關選項。添加了代碼以顯示如何實現工具和擴展配置。 –

+0

我明白了,非常感謝。 :) –

0

對我來說,我必須在參數前面指定-libjar選項。否則,它被認爲是一個論據。

相關問題