将参数传递给Hadoop中的map函数

Poo*_*abu 19 java hadoop mapreduce parameter-passing

我是Hadoop的新手.我想从mapper类的map函数中的main函数(Java程序)访问命令行参数.请建议如何做到这一点.

Pra*_*ati 19

Hadoop 0.20引入了新的MR API,新的(oahmapreduce包)和旧的MR API(oahmapred)之间没有太大的功能差异,除了可以使用新的API在映射器和reducer中提取数据.提到Arnon的是旧API.

查看本文以使用新旧API传递参数.


Arn*_*-Oz 14

您可以通过在参数上挂起参数来传递参数

 JobConf job = new JobConf(new Configuration(), TheJob.class);
 job.setLong("Param Name",longValue)
Run Code Online (Sandbox Code Playgroud)

Configuration类有很少的set方法(Long,Int,Strings等),因此您可以传递多种类型的参数.在map作业中,您可以从Context获取配置(getConfiguration)

  • 是否可以传递ArrayList类型的参数? (3认同)

oDD*_*ooL 5

在最近的 Hadoop(例如 >=0.2 到 2.4+)中,您可以在作业配置期间设置此类选项:

conf = new JobConf(MyJarClass);
conf.set("myStringOption", "myStringValue");
conf.set("myIntOption", 42);
Run Code Online (Sandbox Code Playgroud)

并在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);
    }

}
Run Code Online (Sandbox Code Playgroud)

请注意,configure()在将任何记录传递到映射或归约之前将调用一次。