将参数传递给Hadoop中的map函数
我是Hadoop的新手。 我想从mapper类的map函数中的main函数(Java程序)访问命令行参数。 请建议如何做到这一点。
Hadoop 0.20引入了新的MR API,新的(oahmapreduce包)和旧的MR API(oahmapred)之间没有太大的function差异,除了可以使用新的API在映射器和reducer中提取数据。 提到的Arnon是旧的API。
查看本文以使用新旧API传递参数。
您可以通过在参数上挂起参数来传递参数
JobConf job = new JobConf(new Configuration(), TheJob.class); job.setLong("Param Name",longValue)
Configuration类有很少的设置方法(Long,Int,Strings等),因此您可以传递多种类型的参数。 在map作业中,您可以从Context获取配置(getConfiguration)
在最近的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); } }
请注意,在将任何记录传递给map或reduce之前, configure()
将被调用一次。