2015-12-17 2 views
3

Я пытаюсь выполнить задачу «Уменьшить карту» в рабочем процессе 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 для задачи.

Спасибо за любую помощь.

+2

Создана ли ваша работа по созданию mapreduce или нет? Вы можете проверить это в пользовательском интерфейсе oozie. Поскольку java-действие запустит mapper, который запустит для вас реальную задачу mapreduce. Поэтому проверьте, запущен ли он или нет? – YoungHobbit

+0

Кроме того, вы устанавливаете эти свойства, $ {transformIn}, $ {transformOut}, $ {avroJar} и $ {avroMapReduceJar} в своей job.properties? –

+0

Просто комментарий о настройке 'mapreduce.job.queuename' для действия« launcher »(т.е. Java, Shell, Sqoop ... ничего, кроме MapReduce) >> он будет распространяться на ваше * дочернее задание MapReduce, если оно есть, но не используется для самой работы «запуска»; вы также должны установить 'oozie.launcher.mapreduce.job.queuename' для этого. И они могут быть разными, например. высокоприоритетная очередь для пусковых установок и очередь по умолчанию для сверхмощного дочернего MR. –

ответ

6

> как получить выход MapReduce ...

Назад к основам.

Поскольку вы не хотите упоминать, какую версию Hadoop и какую версию Oozie вы используете, я буду считать «недавнюю» настройку (например, Hadoop 2.7 w/TimelineServer и Oozie 4.2). И поскольку вы не указываете, какой интерфейс вы используете (командная строка «native Oozie/Yarn UI? Hue?»), Я приведу несколько примеров, используя good'old'CLI.

> oozie jobs -localtime -len 10 -filter name=CrazyExperiment

Показывает последние 10 расстрелы процесса «CrazyExperiment», так что вы можете придать соответствующий «идентификатор задания» в следующих командах.

> oozie job -info 0000005-151217173344062-oozie-oozi-W

Показывает статус этого исполнения, с Oozie точки зрения. Если ваше действие Java застряло в режиме PREP, Oozie не смог отправить его в YARN; иначе вы найдете что-то вроде job_1449681681381_5858 в разделе «Внешний идентификатор». Но будьте осторожны! Префикс job - это устаревшая вещь; фактический идентификатор YARN: application_1449681681381_5858.

> oozie job -log 0000005-151217173344062-oozie-oozi-W

Показывает журнал Oozie, как можно было ожидать.

> yarn logs -applicationId application_1449681681381_5858

Показывает сводные журналы для AppMaster (контейнер # 1) и действий Java Launcher (контейнер # 2) - после выполнения закончится. stdout log for Launcher содержит всю информацию об отладке Oozie, настоящая stdout находится на самом дне.

В случае, если ваше действие Java успешно породило другое задание YARN, и вы были осторожны, чтобы отобразить дочерний «идентификатор приложения», вы должны получить его там и запустить еще одну команду yarn logs.

Наслаждайтесь следующими 5-ю днями отладки ;-)

+0

Фантастический ответ! И да, инструкции CLI наиболее актуальны. У нас настроен Hue, но я нашел его еще более неприятно непрозрачным, чем в командной строке, когда что-то идет не так. Я, скорее всего, последую за дополнительными вопросами, но я ценю время. – Suriname0

+0

в «журналах пряжи» я обнаружил следующую ошибку. Я искал его, но ничего не получилось. Журналы пряжи: log4j: Ошибка ERROR setFile (null, true). java.io.FileNotFoundException:/opt/hadoop/logs/userlogs/application_1450691245638_0001/container_1450691245638 _0001_01_000001 (является каталогом). можете ли вы рассказать, как избавиться от этой проблемы с пряжей. – arglee

+0

Хорошо, первая задача MapReduce не выполняется в следующем случае: 'Caused by: java.lang.IllegalArgumentException: Wrong FS: hdfs: //long/file/path/test.wav, expected: file: ///'. Я использую пользовательский формат ввода файлов и устройство чтения записей, которое обеспечивает простую реализацию 'FileInputFormat ', чтобы прочитать полное содержимое WAV-файла в виде байтов в функции Mapper. Любая интуиция о том, почему эта задача MapReduce не удалась при выполнении через Oozie, а не при отправке непосредственно в YARN? – Suriname0

Смежные вопросы