mapreduce.map.speculative、mapreduce.reduce.speculative默认是开启的,即为true
例如wordCount程序
hadoop jar wordCount.jar hdfs:///test/inputhdfs:///test/output
可以在hadoop 任务8088页面点击具体的job,查看job configuration,看到mapreduce.map.speculative为true,来源自mapred-default.xml
关闭map的speculative方法:
1. 在上面运行hadoop命令的机器上,修改hadoop配置文件,例如mapred-site.xml,增加mapreduce.map.speculative的property,设置为false。
这时观察8088页面上job configuration,可以看到mapreduce.map.speculative为false,来源mapred-site.xml。
2. 在wordCount程序代码中,conf.setBoolen(“mapreduce.map.speculative”,false);
这时观察8088页面上job configuration,可以看到mapreduce.map.speculative为false,来源自programatically,即通过程序设置。
但上面的第2步骤对于hbase通过TableMapReduceUtil类实现的mapreduce,不起效果,原因估计是TableMapReduceUtil实现里会重新读取配置文件而导致覆盖程序中动态设置的配置项(如有错误,欢迎指正),故对hbase的mapreduce,要关闭speculative机制,只能修改hadoop命令所关联的配置文件。