Я написал задание 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
Спасибо за помощь.