我寫了一個mapreduce作業來從數據集中提取一些信息。數據集是用戶對電影的評價。用戶數量約爲25萬,電影數量約爲30萬。地圖的輸出是<user, <movie, rating>*> and <movie,<user,rating>*>
。在reducer中,我會處理這些對。如何解決「任務attempt_201104251139_0295_r_000006_0未能報告600秒的狀態。」
但是當我運行作業,映射器完成的預期,但減速總是抱怨說,
Task attempt_* failed to report status for 600 seconds.
我知道這是由於未能及時更新的狀態,所以我在我的代碼添加調用context.progress()
像這樣:
int count = 0;
while (values.hasNext()) {
if (count++ % 100 == 0) {
context.progress();
}
/*other code here*/
}
不幸的是,這沒有幫助。還有很多減少任務失敗。
這裏是日誌:
Task attempt_201104251139_0295_r_000014_1 failed to report status for 600 seconds. Killing!
11/05/03 10:09:09 INFO mapred.JobClient: Task Id : attempt_201104251139_0295_r_000012_1, Status : FAILED
Task attempt_201104251139_0295_r_000012_1 failed to report status for 600 seconds. Killing!
11/05/03 10:09:09 INFO mapred.JobClient: Task Id : attempt_201104251139_0295_r_000006_1, Status : FAILED
Task attempt_201104251139_0295_r_000006_1 failed to report status for 600 seconds. Killing!
BTW,錯誤發生在降低複製階段,日誌說:
reduce > copy (28 of 31 at 26.69 MB/s) > :Lost task tracker: tracker_hadoop-56:localhost/127.0.0.1:34385
感謝您的幫助。
你可以考慮發出context.progress()調用更多經常。只要context.progress()調用之間的時間不超過限制(您的配置中需要600秒),您的代碼應該工作。 – cabad 2013-07-18 22:09:40