Я написал задание mapreduce для извлечения некоторой информации из набора данных.Набор данных - это рейтинг пользователей о фильмах.Количество пользователей составляет около 250 тыс., А количество фильмов около 300 тыс.Выходные данные карты <user, <movie, rating>*> and <movie,<user,rating>*>
.В редукторе я обработаю эти пары.
Но когда я запускаю задание, маппер завершает работу, как ожидается, но редуктор всегда жалуется, что
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!
Кстати, ошибка произошла в фазе сокращения до копирования, журнал говорит:
reduce > copy (28 of 31 at 26.69 MB/s) > :Lost task tracker: tracker_hadoop-56:localhost/127.0.0.1:34385
Спасибо за помощь.