2011-11-23 194 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