Как MapReduce восстанавливается после ошибок, если сбой происходит на промежуточной стадии

2

В Spark я знаю, что ошибки восстанавливаются, делая перерасчет RDD, если RDD не кэшируется. В этом случае вычисление может начинаться с этого кэшированного RDD.

Мой вопрос в том, как ошибки восстанавливаются в каркасах MapReduce (таких как Apache Hadoop). Скажем, произошел сбой в фазе перетасовки (после карты и до сокращения), как это будет восстановлено. Будет ли снова выполнен шаг карты. Есть ли какой-либо этап в MapReduce, где вывод хранится в HDFS, так что вычисление может возобновиться только оттуда? А как насчет карты после Map-Reduce. Является ли выход сокращения, хранящегося в HDFS?

  • 0
    Конечно, нет. Я говорю о фреймворке MapReduce. Я только что сказал, что знаю, как это работает в Apache Spark, но мне было любопытно, как происходит восстановление после сбоев в средах MapReduce, таких как Apache Hadoop.
Теги:
apache-spark
mapreduce

1 ответ

3
Лучший ответ

То, что вы имеете в виду, классифицируется как отказ task который может быть либо map task либо map task reducer task

В случае сбоя конкретной task Hadoop инициирует другой вычислительный ресурс для выполнения неудачной карты или сокращения задач.

Когда дело доходит до отказа в процессе shuffle and sort, это в основном сбой в конкретном узле, где reducer task потерпела неудачу, и он будет настроен на запуск заново на другом ресурсе (кстати, фаза редуктора начинается с процесса перетасовки и сортировки).

Конечно, он не будет распределять задачи бесконечно, если они будут терпеть неудачу. Ниже приведены два свойства, которые могут определять, сколько неудач или попыток задачи могут быть приемлемыми.

mapred.map.max.attempts для задач Map и свойства mapred.reduce.max.attempts для сокращения задач.

По умолчанию, если какая-либо задача выполняется четыре раза (или независимо от того, что вы настроите в этих свойствах), вся работа будет считаться неудачной. - Полное руководство Hadoop

Короче, shuffle and sort являются частью редуктора, это только инициирует попытку повторить задачу редуктора. Задачи карты не будут повторно запускаться, поскольку они считаются завершенными.

Есть ли какой-либо этап в MapReduce, где вывод хранится в HDFS, так что вычисление может возобновиться только оттуда?

Только конечный результат будет сохранен в HDFS. Выходы карты классифицируются как промежуточные и не будут храниться в HDFS, поскольку HDFS будет копировать сохраненные данные и в основном, почему вы хотите, чтобы HDFS управляла промежуточными данными, которые не используются после завершения работы. Также были бы дополнительные накладные расходы на его очистку. Следовательно, вывод карт не сохраняется в HDFS.

А как насчет карты после Map-Reduce. Является ли выход сокращения, хранящегося в HDFS?

Выход редуктора будет храниться в HDFS. Для карты я надеюсь, что приведенного выше описания будет достаточно.

  • 0
    Это было очень полезно. Итак, в случае, если данные с карты будут потеряны, и задача редуктора, зависящая от этих данных, также не будет выполнена, что произойдет? Я думаю, что пересчет будет перезапущен с карты. Правильно?
  • 1
    «Задача редуктора» состоит из трех этапов. Перемешать, сортировать и уменьшать. В то время как Shuffle может начаться, как только будет создано несколько карт, в отличие от него, Sort и Reduce будут запускаться только тогда, когда все Карты готовы. Вы можете также обратиться к этой ссылке для получения дополнительной информации - stackoverflow.com/a/11673808/3838328

Ещё вопросы

Сообщество Overcoder
Наверх
Меню