Как я могу отключить спекулятивное выполнение Hadoop из Java

1

После прочтения спекулятивной задачи Hadoop я пытаюсь отключить спекулятивное выполнение с использованием новой Java api, но это не имеет никакого эффекта.

Это мой основной класс:

public class Main {

  public static void main(String[] args) throws Exception {
    Configuration conf = new Configuration();

    //old api:
    //conf.setBoolean("mapred.map.tasks.speculative.execution", false);
    //new api:
    conf.setBoolean("mapreduce.map.speculative", false);

    int res = ToolRunner.run(conf, new LogParserMapReduce(), args);
    System.exit(res);
  }
}

И мой MapReducer начинается следующим образом:

@Override
public int run(String[] args) throws Exception {
    Configuration conf = super.getConf();

    /*
     * Instantiate a Job object for your job configuration.  
     */
    Job job = Job.getInstance(conf);

Но когда я смотрю на журналы, я вижу:

2014-04-24 10:06:21,418 INFO org.apache.hadoop.mapreduce.lib.input.FileInputFormat (main): Total input paths to process : 16
2014-04-24 10:06:21,574 INFO org.apache.hadoop.mapreduce.JobSubmitter (main): number of splits:26

Если я понимаю, это означает, что спекулятивное выполнение все еще включено, иначе почему бы было 26 разделов, если у меня только 16 входных файлов. Я ошибаюсь?

Примечание. Я считаю, что я использую новый api, так как вижу эти предупреждения в журнале:

2014-04-24 10:06:21,590 INFO org.apache.hadoop.conf.Configuration.deprecation (main): mapred.job.classpath.files is deprecated. Instead, use mapreduce.job.classpath.files
Теги:
hadoop
elastic-map-reduce

2 ответа

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

"16 файлов = 16 Mappers" - это неправильное предположение.

"16 файлов = минимум 16 карт" Это правильно.

Если некоторые из 16 файлов больше размера блока, они разделяются на несколько картографов. Следовательно, ваши 16 файлов, генерирующих 26 Mappers, могут быть не из-за спекулятивного исполнения.

Установка значения в Conf определенно работает. Вы можете проверить, проверив свой job.xml

  • 0
    на самом деле. Еще одна подсказка: перед тем, как отключить спекулятивное выполнение, я обычно видел пару убитых задач, но, поскольку он выключен, убитых задач нет.
0

Ваша настройка "не спекулятивное выполнение для задач карты" прекрасна. Другим способом настройки времени выполнения (что упрощает экспериментирование/тестирование) является передача соответствующего аргумента (-s) в командной строке. Так, например, ниже спекулятивного исполнения для карт, настроенных на off, но для редукторов:

bin/hadoop jar -Dmapreduce.map.speculative=false \
               -Dmapreduce.reduce.speculative=true <jar>

Ещё вопросы

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