После прочтения спекулятивной задачи 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
"16 файлов = 16 Mappers" - это неправильное предположение.
"16 файлов = минимум 16 карт" Это правильно.
Если некоторые из 16 файлов больше размера блока, они разделяются на несколько картографов. Следовательно, ваши 16 файлов, генерирующих 26 Mappers, могут быть не из-за спекулятивного исполнения.
Установка значения в Conf определенно работает. Вы можете проверить, проверив свой job.xml
Ваша настройка "не спекулятивное выполнение для задач карты" прекрасна. Другим способом настройки времени выполнения (что упрощает экспериментирование/тестирование) является передача соответствующего аргумента (-s) в командной строке. Так, например, ниже спекулятивного исполнения для карт, настроенных на off, но для редукторов:
bin/hadoop jar -Dmapreduce.map.speculative=false \
-Dmapreduce.reduce.speculative=true <jar>