1. 程式人生 > >Hadoop執行Job時因超時自動kill原因及解決方案

Hadoop執行Job時因超時自動kill原因及解決方案

轉自:http://snv.iteye.com/blog/1879983

Hadoop執行Job時因超時自動kill,資訊如下:

Java程式碼  收藏程式碼
  1. Task attempt_201305231045_3281_m_000003_0 failed to report status for 600 seconds. Killing!  

原因:

1.執行MR的時間過長,超過了mapred.task.timeout 中設定的值

2.MR執行中因業務比較複雜,沒有report status從而使得master感覺不到此task的存在而kill

解決方案:

方案1:修改mapred-site.xml:

Java程式碼  收藏程式碼
  1. <property>  
  2.     <name>mapred.task.timeout</name>  
  3.     <value>600000</value><!--預設為600S-->可以改的更長!  
  4. </property>  

方案2:根據業務需要手動set值:

Java程式碼  收藏程式碼
  1. conf.setLong("mapred.task.timeout", 900000L);  

但在hadoop0.20.2中貌似最大值限制:36,000,000 ms,顧採用方案3比較可靠

方案3:定時report status

在Mapper或者Reducer的時候,執行復雜的業務操作的時候report status

Java程式碼  收藏程式碼
  1. context.progress();