Я пытаюсь выполнить задачу «Уменьшить карту» в рабочем процессе Oozie, используя действие <java>
.Oozie: Launch Map-Reduce from Oozie <java> action?
O'Reilley в Apache Oozie (Ислам и Srinivasan 2015) отмечает, что:
Хотя это не рекомендуется, действие Java может быть использован для выполнения заданий Hadoop MapReduce, потому что рабочие места MapReduce ничего, кроме программ Java после все. Вызываемый основной класс может быть драйвером Hadoop MapReduce и может вызывать API Hadoop для запуска задания MapReduce. В этом режиме Hadoop генерирует больше карт и редукторов по мере необходимости и запускает их в кластере.
Однако у меня нет успеха в использовании этого подхода.
Определение действия в рабочий процесс выглядит следующим образом:
<java>
<!-- Namenode etc. in global configuration -->
<prepare>
<delete path="${transformOut}" />
</prepare>
<configuration>
<property>
<name>mapreduce.job.queuename</name>
<value>default</value>
</property>
</configuration>
<main-class>package.containing.TransformTool</main-class>
<arg>${transformIn}</arg>
<arg>${transformOut}</arg>
<file>${avroJar}</file>
<file>${avroMapReduceJar}</file>
</java>
main()
Реализация реализация Tool выглядит следующим образом:
public static void main(String[] args) throws Exception {
int res = ToolRunner.run(new TransformTool(), args);
if (res != 0) {
throw new Exception("Error running MapReduce.");
}
}
Рабочий процесс будет врезаться с «Ошибка при выполнении MapReduce» Исключение выше каждый раз; Как я могу получить результат MapReduce для диагностики проблемы? Есть ли проблема с использованием этого Tool
для запуска приложения MapReduce? Я использую неправильные вызовы API?
Я крайне не склонен использовать действие Oozie <map-reduce>
, так как каждое действие в рабочем процессе зависит от нескольких отдельно реализованных схем AVRO.
В чем проблема? Я использую «новый» mapreduce
API для задачи.
Спасибо за любую помощь.
Создана ли ваша работа по созданию mapreduce или нет? Вы можете проверить это в пользовательском интерфейсе oozie. Поскольку java-действие запустит mapper, который запустит для вас реальную задачу mapreduce. Поэтому проверьте, запущен ли он или нет? – YoungHobbit
Кроме того, вы устанавливаете эти свойства, $ {transformIn}, $ {transformOut}, $ {avroJar} и $ {avroMapReduceJar} в своей job.properties? –
Просто комментарий о настройке 'mapreduce.job.queuename' для действия« launcher »(т.е. Java, Shell, Sqoop ... ничего, кроме MapReduce) >> он будет распространяться на ваше * дочернее задание MapReduce, если оно есть, но не используется для самой работы «запуска»; вы также должны установить 'oozie.launcher.mapreduce.job.queuename' для этого. И они могут быть разными, например. высокоприоритетная очередь для пусковых установок и очередь по умолчанию для сверхмощного дочернего MR. –