簡體   English   中英

從Oozie Java Action獲取異常堆棧跟蹤作為輸出

[英]Get exception stacktrace as output from Oozie Java Action

我在Oozie上運行了Java操作。 如果此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類中發生的錯誤。 我正在尋找一種將異常stacktrace發送回我的服務器的方法。

在您的java類中使用System.exit(int n) ,因為這會使java操作進行錯誤轉換。

這樣,您可以在Java操作失敗的情況下獲取專有的stacktrace。

處理Java代碼中的所有異常,並在每個catch塊中,為異常文本(例如e.toString() )設置Oozie屬性鍵(例如Error )。 使用System.exit(0)退出。 (就目前而言,似乎退出System.exit(1)阻止Oozie捕獲輸出。)有關Oozie如何從Java操作捕獲輸出的詳細信息,請參見此處此處

然后,您可以在Oozie工作流程中訪問Error ,然后使用電子郵件操作通過電子郵件將其發送給自己。

提示:處理代碼中異常的更好方法是擁有一個全局單例ErrorHandler類,該類設置Oozie Error屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM