java - 如何从 Java 关闭 hadoop 推测执行

标签 java hadoop elastic-map-reduce speculative-execution

阅读后Hadoop speculative task execution我尝试使用新的 Java api 关闭推测执行,但没有效果。

这是我的主类(class):

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 个文件中的某些文件大于 block 大小,它们将被分割到多个映射器。因此,您的 16 个文件生成 26 个映射器可能不是因为推测执行。

在 Conf 中设置值当然有效。您可以通过检查您的 job.xml 进行验证

关于java - 如何从 Java 关闭 hadoop 推测执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23266148/

相关文章:

Hadoop 似乎在对给定 reduce 调用的值进行迭代期间修改了我的关键对象

hadoop - 如何为 DynamoDb Amazon 控制台导出映射 Hive 中的字段?

java - Hibernate/JPA/GlassFish/Netbeans 在哪里存储数据?

hadoop - 如何在HDFS上使用Hive?

hadoop - 使MapReduce程序读取数据有哪些不同的方式?

hadoop - 为什么 Map 任务输出写入到本地磁盘而不是 HDFS?

java - 使用 Spring Data Hadoop 类路径资源的 IOException

java - 不以//开头如何接受单行 Java 注释?

java - Xpath 选择器在 IE 中不起作用,但在 Chrome 和 Firefox 中工作正常

java - 在对象构造函数中使用随机数