Как исправить "Задача try_201104251139_0295_r_000006_0 не сообщила о статусе в течение 600 секунд".

Я написал задание 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

Спасибо за помощь.

Ответ 1

Самый простой способ - установить этот параметр конфигурации:

<property>
  <name>mapred.task.timeout</name>
  <value>1800000</value> <!-- 30 minutes -->
</property>

in mapred-site.xml

Ответ 2

Самый простой способ - установить в своей конфигурации задания внутри программы

 Configuration conf=new Configuration();
 long milliSeconds = 1000*60*60; <default is 600000, likewise can give any value)
 conf.setLong("mapred.task.timeout", milliSeconds);

** перед установкой, пожалуйста, проверьте файл файла работы (job.xml) в графическом интерфейсе jobtracker о правильном имени свойства, будь то mapred.task.timeout или mapreduce.task.timeout , , , при повторном запуске проверки задания в файле заданий, изменилось ли это свойство в соответствии с установленным значением.

Ответ 3

В новых версиях имя параметра было изменено на mapreduce.task.timeout, как описано в этой ссылке (поиск task.timeout). Кроме того, вы также можете отключить этот тайм-аут, как описано в приведенной выше ссылке:

Число миллисекунд перед задачей будет прекращено, если оно не читает ввод, не записывает результат и не обновляет его статус строка. Значение 0 отключает таймаут.

Ниже приведен пример настройки в mapred-site.xml:

<property>
  <name>mapreduce.task.timeout</name>
  <value>0</value> <!-- A value of 0 disables the timeout -->
</property>

Ответ 4

Если у вас есть запрос на улей и время его выключения, вы можете установить выше конфигурации следующим образом:

установить mapred.tasktracker.expiry.interval = 1800000;

set mapred.task.timeout = 1800000;

Ответ 5

Из https://issues.apache.org/jira/browse/HADOOP-1763

причины могут быть:

1. Tasktrackers run the maps successfully
2. Map outputs are served by jetty servers on the TTs.
3. All the reduce tasks connects to all the TT where maps are run. 
4. since there are lots of reduces wanting to connect the map output server, the jetty servers run out of threads (default 40)
5. tasktrackers continue to make periodic heartbeats to JT, so that they are not dead, but their jetty servers are (temporarily) down.