Hadoop命令行配置没有覆盖默认值?

时间:2016-03-08 20:15:06

标签: java hadoop mapreduce

我无法访问Hadoop Tool实现的命令行配置参数。

我正在执行命令:hadoop jar <jar> <mainclass> -D SomeProperty=NewValue

run(String[] args)方法开始:

Configuration configuration = this.getConf();
configuration.set("SomeProperty", "DefaultValue");
Options options = new Options();
GenericOptionsParser parser = new GenericOptionsParser(configuration, options, args);
args = parser.getRemainingArgs();

if (configuration.get("SomeProperty").equals("DefaultValue"))
    return 1; //Will always return here unless the default value is overridden

属性SomeProperty永远不会设置为NewValue。没有默认值的新属性在配置中设置得很好,因此看起来问题是命令行参数没有覆盖默认配置值。

为什么会这样?我可以改变这种行为吗?

编辑:澄清一下,如果我使用hadoop jar <jar> <mainclass> -D SomeProperty=NewValue -D SecondProperty=OtherValue调用jar命令,则SecondProperty将在配置中正确设置,SomeProperty将不会,并且两者之间的唯一区别是在使用GenericOptionsParser时,配置已调用set("SomeProperty", "DefaultValue")

1 个答案:

答案 0 :(得分:0)

这是我对ToolRunner的责任的误解。

文档说明(强调我的):

  

使用给定的泛型参数解析后,通过Tool.run(String []),运行给定的工具。使用给定的Configuration,或者如果为null则构建一个。使用conf的可能修改版本设置工具的配置。

我错误地认为使用通用选项解析器是Tool的责任。