我是Hadoop的新手。我想从mapper类的map函数中的main函数(Java程序)访问命令行参数。请建议如何做到这一点。
答案 0 :(得分:19)
Hadoop 0.20,引入了新的MR API,新的(oahmapreduce包)和旧的MR API(oahmapred)之间没有太大的功能差异,除了数据可以在映射器和reducers中使用新的API。提到Arnon的是旧API。
检查此article是否使用新旧API传递参数。
答案 1 :(得分:14)
您可以通过在参数
上挂起参数来传递参数 JobConf job = new JobConf(new Configuration(), TheJob.class);
job.setLong("Param Name",longValue)
Configuration类有很少的设置方法(Long,Int,Strings等),因此您可以传递多种类型的参数。在map作业中,您可以从Context(getConfiguration)
获取配置答案 2 :(得分:4)
在最近的Hadoop中(例如> = 0.2到2.4+),您可以在作业配置期间设置此类选项:
conf = new JobConf(MyJarClass);
conf.set("myStringOption", "myStringValue");
conf.set("myIntOption", 42);
并在mapper / reducer类的configure()
方法中检索这些选项:
public static class MyMapper extends MapReduceBase implements Mapper<...> {
Integer myIntegerOption;
String myStringOption;
@Override
public void configure(JobConf job) {
super.configure(job);
myIntegerOption = job.getInt("myIntOption", -1);
// nb: last arg is the default value if option is not set
myStringOption = job.get("myStringOption", "notSet");
}
@Override
public void map(... key, ... value,
OutputCollector<..> output, Reporter reporter) throws IOException {
// here you can use the options in your processing
processRecord(key, value, myIntOption, myStringOption);
}
}
请注意,configure()
将在任何记录传递到地图或减少之前调用一次。