将参数传递给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()将被调用一次。