簡體   English   中英

如何從 Java 關閉 hadoop 推測執行

[英]How can I turn off hadoop speculative execution from Java

閱讀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

“16 個文件 = 16 個映射器”這是一個錯誤的假設。

“16 個文件 = 最少 16 個映射器”這是正確的。

如果 16 個文件中的某些文件大於塊大小,它們將被拆分為多個映射器。 因此,您生成 26 個映射器的 16 個文件可能不是因為推測執行。

在 Conf 中設置值當然有效。 您可以通過檢查您的 job.xml 來驗證

您的設置“沒有對地圖任務進行推測執行”很好。 設置它運行時的另一種方法(使實驗/測試更容易)是通過在命令行中傳遞相應的參數(-s)。 因此,例如,下面的映射的推測執行設置為關閉但對減速器打開:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM