Как узнать, перезапущено ли задание MapReduce или это новый старт?
У меня есть задание MapReduce, которое я использую job.waitForCompletion(true)
, Если одна или несколько задач редуктора уничтожаются или происходит сбой во время выполнения задания, все задание MapReduce перезапускается, и преобразователи и преобразователи выполняются снова (документация). Вот мои вопросы:
1] Можем ли мы знать в начале задания, началось ли задание заново или перезапустилось из-за сбоя в предыдущем запуске? (Это привело меня к Q2)
2] Могут ли помочь счетчики? Не переносится ли значение счетчиков в случае сбоя некоторых задач, что приводит к перезапуску всей работы?
3] Имеется ли какой-либо встроенный метод контрольных точек, предоставляемый Hadoop, который отслеживает предыдущие вычисления и помогает избежать выполнения тех же вычислений, которые выполнялись мапперами и редукторами до сбоя / сбоя?
Извините, если вопросы не сформулированы неясно. Спасибо за помощь.
1 ответ
Некоторая поправка к терминологии. Задание не перезапускается при сбое одной или нескольких задач. Задача может быть перезапущена. Из контекста маппера / редуктора вы можете получить https://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapreduce/TaskAttemptContext.html, который содержит номер попытки в качестве последнего токена идентификатор
Обновления счетчика от неудачных попыток выполнения задачи не агрегируются в итоги задания, поэтому не стоит опасаться перерасчета.
Вообще нет. Вывод невыполненной задачи очищается платформой. Если вы боитесь потерять что-то дорогое из-за сбоя задачи, я бы порекомендовал разделить вашу работу на несколько этапов карты / сокращения. Вы также можете иметь свой собственный изменяемый распределенный кеш, но это тоже не рекомендуется.