gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 14:49:59 27 4
gpt4 key购买 nike

看完Hadoop speculative task execution我正在尝试使用新的 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 个文件中的一些文件大于 block 大小,它们将被拆分到多个映射器。因此,您的 16 个文件生成 26 个映射器可能不是因为推测执行。

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

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com