В Spark я знаю, что ошибки восстанавливаются, делая перерасчет RDD, если RDD не кэшируется. В этом случае вычисление может начинаться с этого кэшированного RDD.
Мой вопрос в том, как ошибки восстанавливаются в каркасах MapReduce (таких как Apache Hadoop). Скажем, произошел сбой в фазе перетасовки (после карты и до сокращения), как это будет восстановлено. Будет ли снова выполнен шаг карты. Есть ли какой-либо этап в MapReduce, где вывод хранится в HDFS, так что вычисление может возобновиться только оттуда? А как насчет карты после Map-Reduce. Является ли выход сокращения, хранящегося в HDFS?
То, что вы имеете в виду, классифицируется как отказ 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. Для карты я надеюсь, что приведенного выше описания будет достаточно.