Выполнение спекулятивных задач Hadoop
В статье Google MapReduce у них есть задача резервного копирования, я думаю, что это то же самое, что и спекулятивная задача в Hadoop. Как реализована спекулятивная задача? Когда я запускаю умозрительное задание, оно начинается с самого начала, как старшее и медленное, или только с того места, где было достигнуто старшее задание (если да, то должно ли оно копировать весь промежуточный статус и данные?)
1 ответ
Одна проблема с системой Hadoop состоит в том, что, разделяя задачи между многими узлами, несколько медленных узлов могут ограничить скорость остальной части программы.
Задачи могут быть медленными по разным причинам, включая ухудшение аппаратного обеспечения или неправильную конфигурацию программного обеспечения, но причины могут быть трудно обнаружить, так как задачи все еще успешно завершаются, хотя и через более длительное время, чем ожидалось. Hadoop не пытается диагностировать и исправлять медленные задачи; вместо этого он пытается определить, когда задача выполняется медленнее, чем ожидалось, и запускает другую эквивалентную задачу в качестве резервной копии. Это называется спекулятивным исполнением задач.
Например, если один узел имеет медленный дисковый контроллер, он может считывать свои данные только на 10% скорости всех остальных узлов. Таким образом, когда 99 задач карты уже завершены, система все еще ожидает регистрации последней задачи карты, которая занимает намного больше времени, чем все другие узлы.
Заставляя задачи выполняться изолированно друг от друга, отдельные задачи не знают, откуда поступают их данные. Задачи доверяют платформе Hadoop, чтобы просто предоставить соответствующий вклад. Следовательно, один и тот же ввод может обрабатываться несколько раз параллельно, чтобы использовать различия в возможностях машины. Поскольку большинство задач в задании подходят к концу, платформа Hadoop будет планировать избыточные копии оставшихся задач на нескольких узлах, которые не должны выполнять другую работу. Этот процесс известен как умозрительное исполнение. Когда задачи завершаются, они сообщают об этом факту в JobTracker. Какая бы копия задачи ни заканчивалась первой, она становится окончательной. Если другие копии выполнялись спекулятивно, Hadoop говорит TaskTrackers отказаться от задач и отбросить их результаты. Затем редукторы получают свои входные данные от того, кто первым успешно завершил Mapper.
Спекулятивное исполнение включено по умолчанию. Вы можете отключить спекулятивное выполнение для картографов и редукторов, установив mapred.map.tasks.speculative.execution
а также mapred.reduce.tasks.speculative.execution
Параметры JobConf имеют значение false, соответственно, используя старый API, в то время как с более новым API вы можете изменить mapreduce.map.speculative
а также mapreduce.reduce.speculative
,
Таким образом, чтобы ответить на ваш вопрос, он начинается заново и не имеет никакого отношения к тому, сколько выполнено / выполнено другим заданием.
Ссылка: http://developer.yahoo.com/hadoop/tutorial/module4.html