2012-07-12 124 views
38

我想在我的代碼遇到未處理的異常時自動殺掉我所有的hadoop作業。我想知道做什麼是最佳做法?如何殺死hadoop作業

感謝

回答

4

未處理的異常會(假設它是可重複的類似錯誤的數據,而不是讀取特定的數據節點的錯誤)反正最終無法完成作業。

您可以配置的時間特定地圖的最大數量或減少任務可以通過以下屬性整個作業失敗前可能會失敗:

  • mapred.map.max.attempts - 每個地圖的任務嘗試的最大數量。換句話說,在放棄它之前,框架會嘗試執行一次地圖任務很多次。
  • mapred.reduce.max.attempts - 同上,但對於降低任務

如果您想在第一次失敗,從它的默認4將該值設置爲1。

+0

但是,這也將導致任務失敗,如果一個節點死亡,其任務失敗,即使沒有拋出異常, 對?不過,我相信這確實是OP想要的最接近的解決方案。 – vefthym 2014-02-14 13:06:16

90

根據失敗的一份工作版本,執行:

版本< 2.3.0

殺死一個Hadoop的工作:

hadoop job -kill $jobId 

你可以得到所有的jobId正在做的一個列表:

hadoop job -list 

版本> = 2.3.0

殺死一個Hadoop的工作:

yarn application -kill $ApplicationId 

您可以獲取所有ApplicationId的列表這樣做:

yarn application -list 
+1

也映射job -kill $ jobId – 2015-04-12 18:09:08

2

只是強行殺死進程ID,hadoop作業也會自動終止。使用此命令:

kill -9 <process_id> 

eg: process ID no: 4040 namenode

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

folloing命令的使用折舊

hadoop job -list 
hadoop job -kill $jobId 

考慮使用

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

不工作,並導致以下錯誤:線程「main」中的異常java.lang.IllegalArgumentException:JobId字符串:application_1470941878165_0001未正確形成 – tribbloid 2016-08-11 19:25:30

9

運行list來顯示所有的工作,然後用jobID/applicationID在適當的c ommand。

殺mapred工作:

mapred job -list 
mapred job -kill <jobId> 

殺紗作業:

yarn application -list 
yarn application -kill <ApplicationId>