2012-07-12 11 views
38

Chcę zabić wszystkie moje zadania hasoop automatycznie, gdy mój kod napotka nieobsługiwany wyjątek. Zastanawiam się, jaka jest najlepsza praktyka, aby to zrobić?Jak zabić zadania hadoopowe

Dzięki

Odpowiedz

4

nieobsługiwany wyjątek będzie (zakładając, że powtarzalne jak złych danych, w przeciwieństwie do błędów odczytu z danego węzła danych) ostatecznie nie zadanie tak.

Można skonfigurować maksymalną liczbę razy określonej mapy lub zmniejszyć zadanie może zawieść zanim nie cała praca przez następujące właściwości:

  • mapred.map.max.attempts - Maksymalna liczba prób na mapie zadania. Innymi słowy, framework spróbuje wykonać zadanie mapowania wiele razy, zanim się go zrezygnuje.
  • mapred.reduce.max.attempts - jw, ale dla zmniejszenia zadań

Jeśli chcesz zawieść pracę przy pierwszej awarii, ustaw tę wartość z jej domyślnie 4 do 1.

+0

Ale to spowoduje również praca na niepowodzenie, jeśli jeden węzeł umiera, a jej zadania nie, nawet jeśli nie ma wyjątków rzucony , dobrze? Uważam jednak, że jest to rzeczywiście najbliższe rozwiązanie tego, co chce OP. – vefthym

90

zależności od wersja, wykonaj następujące czynności:

wersja < 2.3.0

zabić zadanie Hadoop:

hadoop job -kill $jobId 

Można uzyskać listę robią wszystko jobid za:

hadoop job -list 

wersji> = 2.3.0

zabić zadanie Hadoop:

yarn application -kill $ApplicationId 

Możesz uzyskać listę wszystkich ApplicationId robienie:

yarn application -list 
+1

Również zadanie odwzorowane -kill $ jobId –

2

Po prostu wymusić na ID procesu, zadanie hadoop zostanie automatycznie zabity. Użyj tego polecenia:

kill -9 <process_id> 

eg: process ID no: 4040 namenode

[email protected]:~$ kill -9 4040 
16

Użycie polecenia folloing są amortyzowane

hadoop job -list 
hadoop job -kill $jobId 

rozważyć użycie

mapred job -list 
mapred job -kill $jobId 
+0

Nie działa i powoduje następujący błąd: Wyjątek w wątku "główny" java.lang.IllegalArgumentException: Ciąg JobId: application_1470941878165_0001 nie został poprawnie utworzony – tribbloid

9

Uruchom list pokazać wszystkie zadania, a następnie użyć jobID/applicationID w odpowiednim c ommand.

Zabij mapred pracy:

mapred job -list 
mapred job -kill <jobId> 

Zabij przędzy pracy:

yarn application -list 
yarn application -kill <ApplicationId>