Передача параметров в функцию отображения в Hadoop - PullRequest
19 голосов
/ 10 декабря 2011

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

Ответы [ 3 ]

19 голосов
/ 10 декабря 2011

В Hadoop 0,20 , представлен новый API-интерфейс MR, функциональных различий между новым (пакет oahmapreduce) и старым API-интерфейсом MR (oahmapred) не так много, за исключением того, что данные можно извлекать в преобразователях и редукторах с помощьюновый API.Арнон упоминается со старым API.

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

14 голосов
/ 10 декабря 2011

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

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

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

4 голосов
/ 25 июля 2014

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

...