Как узнать, перезапущено ли задание MapReduce или это новый старт?

У меня есть задание MapReduce, которое я использую job.waitForCompletion(true), Если одна или несколько задач редуктора уничтожаются или происходит сбой во время выполнения задания, все задание MapReduce перезапускается, и преобразователи и преобразователи выполняются снова (документация). Вот мои вопросы:

1] Можем ли мы знать в начале задания, началось ли задание заново или перезапустилось из-за сбоя в предыдущем запуске? (Это привело меня к Q2)

2] Могут ли помочь счетчики? Не переносится ли значение счетчиков в случае сбоя некоторых задач, что приводит к перезапуску всей работы?

3] Имеется ли какой-либо встроенный метод контрольных точек, предоставляемый Hadoop, который отслеживает предыдущие вычисления и помогает избежать выполнения тех же вычислений, которые выполнялись мапперами и редукторами до сбоя / сбоя?

Извините, если вопросы не сформулированы неясно. Спасибо за помощь.

1 ответ

  1. Некоторая поправка к терминологии. Задание не перезапускается при сбое одной или нескольких задач. Задача может быть перезапущена. Из контекста маппера / редуктора вы можете получить https://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapreduce/TaskAttemptContext.html, который содержит номер попытки в качестве последнего токена идентификатор

  2. Обновления счетчика от неудачных попыток выполнения задачи не агрегируются в итоги задания, поэтому не стоит опасаться перерасчета.

  3. Вообще нет. Вывод невыполненной задачи очищается платформой. Если вы боитесь потерять что-то дорогое из-за сбоя задачи, я бы порекомендовал разделить вашу работу на несколько этапов карты / сокращения. Вы также можете иметь свой собственный изменяемый распределенный кеш, но это тоже не рекомендуется.

Другие вопросы по тегам