2016-05-05 13 views
2

Ich habe eine Java-Aktion auf Oozie ausgeführt. Ich möchte eine vollständige Java-Ausnahme erhalten, falls diese Java-Aktion fehlschlägt. Die Java-Aktion verwendet einfach eine JAR-Datei. Hier ist die Java-AktionGet Ausnahme StackTrace als Ausgabe von Oozie Java Aktion

<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> 

Wie sendet es den Fehler in meiner Java-Klasse zurück. Ich bin auf der Suche nach einer Möglichkeit, die Ausnahme StackTrace zurück zu meinem Server zu senden.

+0

Sie können einfach die Hadoop-Protokolldatei anzeigen, um die Ausnahme-Stack-Ablaufverfolgung anzuzeigen. –

+0

@Asankasanjaya aktualisiert die Frage. Ich bin auf der Suche nach einer Möglichkeit, Exception Stacktrace zurück zu meinem Server zu senden. – 100rabh

+0

Was meinst du genau mit _ "my server" _> meinst du hinzufügen in das Oozie Job Log (nicht machbar AFAIK), oder sende eine Warnung an eine benutzerdefinierte Monitoring App mit dem Stack als Payload (nicht machbar von YARN AFAIK) ? –

Antwort

0

Verwenden Sie System.exit(int n) in Ihrer Java-Klasse, da dies die Java-Aktion zu einem Fehler Übergang machen wird.

Auf diese Weise erhalten Sie Exception Stacktrace im Falle von Java-Aktion fehlgeschlagen.

+0

Erhalte ich die Fehlermeldung in $ {wf: errorMessage (wf: lastErrorNode())} – 100rabh

+0

Ja, Sie können die Fehlermeldung mit dem obigen Code erhalten –

0

Behandeln Sie alle Ausnahmen in Ihrem Java-Code und legen Sie in jedem catch-Block einen Oozie-Eigenschaftsschlüssel (z. B. Error) für den Ausnahmetext fest (z. B. e.toString()). Beenden Sie mit System.exit(0). (Vorerst scheint es so, als würde das Beenden mit System.exit(1) Oozie daran hindern, die Ausgabe zu erfassen.) Einzelheiten dazu, wie Oozie die Ausgabe einer Java-Aktion erfassen kann, finden Sie unter here und .

Sie können dann in Ihrem Oozie-Workflow auf Error zugreifen und es per E-Mail an die Adresse Email action senden.

Tipp: Eine bessere Möglichkeit, Ausnahmen in Ihrem Code zu behandeln, wäre eine globale Singleton-Klasse ErrorHandler, die die Eigenschaft Oozie Error festlegt.

Verwandte Themen