Получить трассировку стека исключений в качестве вывода Oozie Java Action

У меня есть действие Java, работающее на Oozie. Я хотел бы получить полное исключение Java в случае сбоя этого действия Java. Действие Java просто использует файл jar. Вот действие Java

<workflow-app name='proj-wf' xmlns="uri:oozie:workflow:0.2">
    <start to='startIndex'/>
    <action name='startIndex'>
       <java>
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <prepare>
            </prepare>
            <configuration>
                <property>
                    <name>mapred.job.queue.name</name>
                    <value>${queueName}</value>
                </property>
            </configuration>
        <main-class>com.myproj.MyDriverJob</main-class>
            <arg>-Dlww.commit.on.close=true</arg>

            <capture-output/>
        </java>
        <ok to='end'/>
        <error to='end'/>
    </action>
    <kill name='kill'>
    <message>Java failed, error message[${wf:errorMessage(wf:lastErrorNode())}] </message>
    </kill>
    <end name='end'/>
</workflow-app>

Как он отправляет ошибку, возникшую в моем классе Java. Я ищу способ отправить трассировку стека исключений обратно на мой сервер.


person 100rabh    schedule 05.05.2016    source источник
comment
Вы можете просто просмотреть файл журнала Hadoop, чтобы увидеть трассировку стека исключений.   -  person Asanka sanjaya    schedule 05.05.2016
comment
@Asankasanjaya обновил вопрос. Я ищу способ отправить трассировку стека исключений обратно на мой сервер.   -  person 100rabh    schedule 05.05.2016
comment
Что именно вы имеете в виду под мой сервер › вы имеете в виду добавить в журнал заданий Oozie (невозможно, насколько я знаю) или отправить предупреждение в какое-то пользовательское приложение мониторинга со стеком в качестве полезной нагрузки (невозможно из YARN НАСКОЛЬКО МНЕ ИЗВЕСТНО)?   -  person Samson Scharfrichter    schedule 06.05.2016
comment
Помните, что Oozie отправляет вашу работу во внешнюю распределенную систему (YARN); затем он просто время от времени опрашивает YARN, чтобы получить статус. Не подробности.   -  person Samson Scharfrichter    schedule 06.05.2016
comment
Если вы один из самых смелых, вы можете получить идентификатор задания YARN от Oozie (см. oozie.apache.org/docs/4.1.0/, но остерегайтесь несоответствия устаревшего префикса job_ и более нового application_) и создайте некоторый собственный код для запроса сведений журнала из YARN с помощью REST API. , разобрать, отправить куда-нибудь и т.д.   -  person Samson Scharfrichter    schedule 06.05.2016
comment
@SamsonScharfrichter Меня больше интересует исключение, из-за которого работа oozie завершается, а не заполняет журналы.   -  person 100rabh    schedule 06.05.2016
comment
Да, но Исключение находится там в журналах, в виде простого текста. Очень жаль.   -  person Samson Scharfrichter    schedule 06.05.2016


Ответы (2)


Используйте System.exit(int n) в своем классе Java, так как это заставит действие Java выполнить переход с ошибкой.

Таким образом, вы можете получить трассировку стека исключения в случае сбоя действия Java.

person Nishu Tayal    schedule 08.05.2016
comment
Получу ли я сообщение об ошибке в ${wf:errorMessage(wf:lastErrorNode())} - person 100rabh; 09.05.2016
comment
да, вы можете получить сообщение об ошибке, используя приведенный выше код - person Nishu Tayal; 09.05.2016

Обработайте все исключения в коде Java и в каждом блоке catch установите ключ свойства Oozie (скажем, Error) в текст исключения (например, e.toString()). Выйдите с помощью System.exit(0). (На данный момент кажется, что выход с System.exit(1) не позволяет Oozie захватить выходные данные.) Подробнее о том, как Oozie может записывать выходные данные из действия Java, см. здесь и здесь.

Затем вы можете получить доступ к Error в рабочем процессе Oozie и отправить его себе по электронной почте, используя электронную почту. действие.

Совет. Лучшим способом обработки исключений в вашем коде будет использование глобального одноэлементного класса ErrorHandler, который устанавливает свойство Oozie Error.

person lostsoul29    schedule 25.05.2017