Java 如何使用外部属性执行Hadoop Jar

Java 如何使用外部属性执行Hadoop Jar,java,hadoop,properties,hdfs,Java,Hadoop,Properties,Hdfs,我有一个与外部属性文件一起工作的jar应用程序。使用该文件时,用户可以覆盖默认属性。默认属性和核心属性是构建的一部分,因此没有问题 正常情况下,我会做一些类似于theese的事情: java -jar MyAwesomeApp.jar user.properties 或 但是在hadoop中,jar是在hadoop框架内执行的,如下所示 /bin/hadoop jar MyAwesomeApp.jar input output 无论我把-D放在哪里,我都无法通过System.getPrope

我有一个与外部属性文件一起工作的jar应用程序。使用该文件时,用户可以覆盖默认属性。默认属性和核心属性是构建的一部分,因此没有问题

正常情况下,我会做一些类似于theese的事情:

java -jar MyAwesomeApp.jar user.properties

但是在hadoop中,jar是在hadoop框架内执行的,如下所示

/bin/hadoop jar MyAwesomeApp.jar input output
无论我把-D放在哪里,我都无法通过System.getProperty(…)获得值。未设置属性。hadoop文档说-D是一个通用选项,设置在命令之后。但是如果我这样做,我会得到一个错误,-D不是一个有效的jar文件(duh…)

我的目标是保持应用程序尽可能干净…所以我只想将用户配置作为一个参数作为最后手段传递,即

/bin/hadoop jar MyAwesomeApp.jar input output user.properties
我希望有人能告诉我如何让-D工作:/
Hadoop正在运行伪分布式,所以我实际上也在使用HDFS…

在运行Hadoop jar命令之前运行export Hadoop_OPTS=“-Dmyapp.userproperties=user.properties”。您还可以在导出的具体操作中查找GenericOptions解析器?我认为导出只是为以后使用设置了一个特定的值。那么我必须在通话中使用它吗?这个链接是我一开始使用的。它说调用应该是bin/hadoop命令[genericopptions][commandOptions],但是如果我执行bin/hadoop jar-Dmyapp.userproperties=user.properties MyAwesomeApp.jar,那么我会得到一个错误,说-Dmyapp.userproperties不是有效的jar文件……在运行hadoop jar命令之前,请尝试在终端中运行export命令。export HADOOP_OPTS=“-Dmyapp.userproperties=user.properties”将设置系统属性中的选项。您只需在java代码中使用System.getProperty(“myapp.userproperties”)访问值即可。好吧,这似乎可行……但即使在应用程序完成后,此导出仍然存在……这对我来说不太干净……我可以取消导出吗?
/bin/hadoop jar MyAwesomeApp.jar input output user.properties