org.apache.hadoop.mapred.lib.MultipleOutputs.addNamedOutput() в oozie

Я пытаюсь использовать MultipleOutputs для изменения имени выходного файла в редюсере. Я использую рабочий процесс oozie для запуска задания mapreduce.

Я не могу найти способы добавить свойство ниже в рабочий процесс oozie -

MultipleOutputs.addNamedOutput(job, "text", TextOutputFormat.class, Text.class, Text.class);

Поскольку это действие oozie mapreduce, у меня нет класса драйвера для размещения кода выше.


person Charitra kocheri    schedule 16.04.2018    source источник
comment
Я знаю, что это не очень полезный ответ, но я всегда считал выполнение заданий MR через Oozie болезненным. Я всегда запускал задание MR через Oozie, как вы запускаете обычный JAR в Oozie. Таким образом, вы можете использовать класс Driver.   -  person Ben Watson    schedule 16.04.2018
comment
@CharitraKocheri Я добавил возможное решение. Пожалуйста, проверьте.   -  person Gyanendra Dwivedi    schedule 16.04.2018


Ответы (1)


Ответ лежит в исходном коде метода. Из hadoop core 1.2.1 банки

/*     */   public static void addNamedOutput(Job job, String namedOutput, Class<? extends OutputFormat> outputFormatClass, Class<?> keyClass, Class<?> valueClass)
/*     */   {
/* 248 */     checkNamedOutputName(job, namedOutput, true);
/* 249 */     Configuration conf = job.getConfiguration();
/* 250 */     conf.set("mapreduce.multipleoutputs", conf.get("mapreduce.multipleoutputs", "") + " " + namedOutput);
/*     */     
/* 252 */     conf.setClass("mapreduce.multipleoutputs.namedOutput." + namedOutput + ".format", outputFormatClass, OutputFormat.class);
/*     */     
/* 254 */     conf.setClass("mapreduce.multipleoutputs.namedOutput." + namedOutput + ".key", keyClass, Object.class);
/* 255 */     conf.setClass("mapreduce.multipleoutputs.namedOutput." + namedOutput + ".value", valueClass, Object.class);
/*     */   }

Таким образом, это указывает на то, чтобы снова установить "mapreduce.multipleoutputs" с разделенным пробелом namedOutput и установить классы формата, ключа и значения, используя приведенные ниже переменные.

"mapreduce.multipleoutputs.namedOutput." + namedOutput + ".format"
"mapreduce.multipleoutputs.namedOutput." + namedOutput + ".key"
"mapreduce.multipleoutputs.namedOutput." + namedOutput + ".value"

Надеюсь, поможет.

person Gyanendra Dwivedi    schedule 16.04.2018