2012-11-23 9 views
6

Oozieワークフローのステップとして実行しているhadoop map-reduceジョブがあります。 org.apache.hadoop.util.Toolを実装するjavaアクションを使用して開始されます。Oozieで殺害されたジョブに関するより具体的なエラー情報を得る方法

何らかの理由でジョブが強制終了された場合、処理中に例外が発生した場合はスタックトレースを含む通知を電子メールで送信できます。

現在、私はそれをこのように実行します。

<action name="sendErrorNotifications"> 
    <email xmlns="uri:oozie:email-action:0.1"> 
     <to>[email protected]</to> 
     <subject>Job execution failed ${wf:id()}</subject> 
     <body>Job execution failed, error message: [${wf:errorMessage(wf:lastErrorNode())}]</body> 
    </email> 
    <ok to="fail" /> 
    <error to="fail" /> 
</action> 

しかし、私が受け取るすべてがちょうどです:非常に有用ではありません

Job execution failed, error message: [Job failed!] 

:)と私はすべてのノードを移動して、チェックする必要があります自分でログ。

もっと具体的なメッセージを表示するにはどうすればよいですか?私は私の例外をキャッチし、ツールのいくつかのoozie、キャッチ可能なものに包む、またはだけではなく、$ {WFのようなものを使用する必要がありますにErrorMessageを...

おかげ

答えて

2

私は、エラーを処理し、カウンタを使用して原因をアクセスする方法を発見しました。

} catch (Throwable t) { 
    Counters.Counter counter = reporter.getCounter("Exceptions", t.getClass().getSimpleName()); 
     counter.increment(1); 
    counter.setDisplayName(t.getClass().getSimpleName() + "\n last failed key: " + key.toString() + "\n " + ExceptionUtils.getStackTrace(t)); 
    reporter.incrCounter("Exceptions", "TOTAL_COUNT", 1); 
    reporter.progress(); 
} 

そして、これらのカウンタは簡単です:たぶんそれは、彼らがために設計されているものではありませんが、アウト唯一の方法のようです...

だから私はこのようなマッパーと減速しておきたThrowableをキャッチジョブが終了した後、RunningJob経由でツールでアクセスできます。 "Exceptions"グループには、displayNameフィールドに必要なすべての情報を含むすべての例外カウンタが含まれます。

この方法で問題が発生した場合や、優れた方法がわかっている場合は、ご意見ください。

2

1つの提案は、あなたのメインの中で例外をキャッチすることですメソッドを呼び出して、その値に(キャプチャ出力フラグと組み合わせて)シリアル化された例外を持つプロパティ( 'exceptionTrace'など)をエクスポートし、wf:actionData('myJavaAction')['exceptionTrace'] EL関数を使用して参照できます。

http://oozie.apache.org/docs/3.2.0-incubating/WorkflowFunctionalSpec.html#a3.2.7_Java_Action

+0

ツールでは、たとえば減速機で発生した例外をキャッチできないという問題があります。私たちが持っているものはすべて就職状況なので、何かが間違っていることが今やできる...私は可能な答えとして私が使用する解決策を提供します。 – Art

関連する問題