2

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's 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

理解できれば、これは投機的実行がまだ続いていることを意味します。そうでなければ、入力ファイルが 16 個しかないのに、なぜ 26 個の分割があるのでしょうか。私は間違っていますか?

注: ログに次の警告が表示されるので、新しい 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
4

2 に答える 2