Спекулятивное выполнение может быть включено и выключено для задач карты и сокращения задач на уровне кластера или на основе работы.
Спекулянт создается в MRAppMaster
(Map-Reduce Application Master). Как вы упомянули в своем вопросе, Ниже приведен фрагмент кода в MRAppMaster::serviceInit()
функции, которая конкретизирует спекулянт:
if (conf.getBoolean(MRJobConfig.MAP_SPECULATIVE, false)
|| conf.getBoolean(MRJobConfig.REDUCE_SPECULATIVE, false)) {
//optional service to speculate on task attempts' progress
speculator = createSpeculator(conf, context);
addIfService(speculator);
}
Он проверяет JobConfig
, чтобы увидеть, если спекулятивное выполнение включенного либо карты или уменьшить задачи, а затем создает спекулянт.
Поскольку спекулянт создан внутри MRAppMaster
, вы можете включить свой специализированный спекулянт для каждой работы.
Ниже приведен умозрительные свойства исполнения:
- mapreduce.map.speculative: Включить рискованное выполнение для карты задач
- mapreduce.reduce.speculative: Включить спекулятивное выполнение для уменьшения задач
- yarn.app.mapreduce.am.job.speculator.class: Категория спекулянта
- yarn.app.mapreduce.am.job.task.estimator.class: класс оценщика. Это используется спекулятором для оценки времени выполнения задачи.
благодарит за ответ! – WilD