Подтвердить что ты не робот

Передача параметров функции отображения в Hadoop

Я новичок в Hadoop. Я хочу получить доступ к аргументу командной строки из главной функции (Java-программы) внутри функции map класса mapper. Пожалуйста, предложите способы сделать это.

4b9b3361

Ответ 1

Hadoop 0.20, представил новый MR API, нет большой разницы в функциональности между новым (oahmapreduce package) и старым MR API (oah mapred), за исключением того, что данные могут быть вытащены внутри картографов и редукторов с использованием нового API. О чем говорит Арнон со старым API.

Проверьте статью для передачи параметров с использованием нового и старого API.

Ответ 2

Вы можете передавать параметры, вставляя их в конфигурацию

 JobConf job = new JobConf(new Configuration(), TheJob.class);
 job.setLong("Param Name",longValue)

В классе конфигурации несколько методов набора (Long, Int, Strings и т.д.), поэтому вы можете передавать параметры нескольких типов. В задании карты вы можете получить конфигурацию из контекста (getConfiguration)

Ответ 3

В недавнем Hadoop (например, >= 0.2 до 2.4+) вы задали бы такие параметры во время конфигурации задания:

conf = new JobConf(MyJarClass);
conf.set("myStringOption", "myStringValue");
conf.set("myIntOption", 42);

И получить эти параметры в методе 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() будет вызываться один раз, прежде чем любые записи будут переданы на карту или уменьшены.