Я новичок в Hadoop. Я хочу получить доступ к аргументу командной строки из главной функции (Java-программы) внутри функции map класса mapper. Пожалуйста, предложите способы сделать это.
Передача параметров функции отображения в Hadoop
Ответ 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()
будет вызываться один раз, прежде чем любые записи будут переданы на карту или уменьшены.