我无法访问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")
。
答案 0 :(得分:0)
这是我对ToolRunner
的责任的误解。
文档说明(强调我的):
使用给定的泛型参数解析后,通过Tool.run(String []),运行给定的工具。使用给定的Configuration,或者如果为null则构建一个。使用conf的可能修改版本设置工具的配置。
我错误地认为使用通用选项解析器是Tool
的责任。