2012-11-23 12 views
6

Mam mapę hadoop-redukuję zadanie działające jako krok w przepływie pracy Oozie. Jest on uruchamiany za pomocą akcji java, która implementuje org.apache.hadoop.util.Tool.Jak uzyskać bardziej szczegółowe informacje o błędzie na zabitym zleceniu w Oozie

Kiedy z jakiegoś powodu praca jest zabijana, chcę mieć możliwość wysłania wiadomości e-mail z powiadomieniem, które powinno zawierać stos, jeśli wystąpił wyjątek podczas przetwarzania.

Obecnie zrobić to w ten sposób:

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

Ale otrzymuję tylko:

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

co nie jest bardzo użyteczny :) a ja muszę pójść i sprawdzić wszystkie węzły loguje się sam.

Jak mogę uzyskać bardziej szczegółowe wiadomości? Powinienem złapać wyjątki i zawinąć do jakiegoś jednego oozie-połów w narzędziu, albo po prostu użyć czegoś zamiast $ {WF: ErrorMessage ...

Dzięki

Odpowiedz

2

znalazłem sposób obsługi błędów i dostępu przyczynę za pomocą liczników. Może to nie to, czego są one przeznaczone dla, ale wydaje się być jedynym wyjściem ...

Więc łapię każdy Throwable w odwzorowującym i reduktora tak:

} 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(); 
} 

I te liczniki są łatwo dostępne w narzędziu poprzez RunningJob po zakończeniu pracy. Grupa "Wyjątki" zawiera wszystkie liczniki wyjątków ze wszystkimi potrzebnymi informacjami w polu displayName.

Prosimy o komentarz, jeśli zauważysz jakiekolwiek problemy w tym podejściu lub jeśli znasz lepszy.

2

Jedną z sugestii jest złapać wyjątek w głównym i wyeksportuj właściwość (na przykład wyjątek "exceptionTrace") z wyjątkiem serializowanym do jego wartości (w połączeniu z flagą przechwytywania i wyprowadzania), do której można następnie odwoływać się przy użyciu funkcji EL wf:actionData('myJavaAction')['exceptionTrace'].

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

+0

Problem polega na tym, że narzędzie nie może wychwycić wyjątku, który wystąpił w, powiedzmy, reduktorze. Wszystko, co mamy, to status pracy, więc możemy teraz, że coś poszło nie tak ... Dostarczę rozwiązanie, którego używam jako możliwą odpowiedź. – Art

Powiązane problemy