2011-11-23 153 views
14

我正在使用新的Hadoop API並尋找一種方法將一些參數(少數字符串)傳遞給映射器。
我該怎麼做?將參數傳遞給Hadoop映射器

This solutions works for old API

JobConf job = (JobConf)getConf(); 
job.set("NumberOfDocuments", args[0]); 

這裏,「NumberOfDocuments」是參數的名稱和它的值從「args[0]「,命令行參數讀取。一旦您設置此參數,可以如下檢索其在減速或映射值:

private static Long N; 
public void configure(JobConf job) { 
    N = Long.parseLong(job.get("NumberOfDocuments")); 
} 

注意,棘手的部分是,你可以不設置這樣的參數:

Configuration con = new Configuration(); 
con.set("NumberOfDocuments", args[0]); 
+0

新的和舊的方法在這裏:http://www.thecloudavenue.com/2011/11/passing-parameters-to- mappers-and.html – weefwefwqg3

回答

38

在main方法在運行作業時設置如下所需的參數或使用-D command line option

Configuration conf = new Configuration(); 
conf.set("test", "123"); 

Job job = new Job(conf); 

在映射器/減速器得到參數作爲

Configuration conf = context.getConfiguration(); 
String param = conf.get("test"); 
+0

,如果我們想傳遞一個整數參數給映射器? – MTT

+0

VTT - Configuration對象具有類型安全的setter:setBoolean/setDouble/setEnum/etc ...也有相應的getter。 –

+1

我想設置一個數組,但我不能有任何其他方式可以做到這一點? – tosi