我有一个uberjar,它执行一些级联etl任务。jar的执行方式如下:
hadoop jar munge-data.jar
我想在作业启动时将参数传递给jar,例如。
hadoop jar munge-data.jar -Denv=prod
不同的凭据、主机名等。。。将根据环境从属性文件中读取。
如果作业被执行,这将起作用 java jar munge-data.jar -Denv=prod
,自从 env
无法访问属性:
System.getProperty("env")
但是,当jar被执行时,这不起作用 hadoop jar ...
.
我看到了一个类似的线程,其中应答者声明可以使用类似org.apache.hadoop.conf.configuration的类来访问属性。从答案上看,我不清楚 conf
对象被创建。我试了一下,结果它回来了 null
:
Configuration configuration = new Configuration();
System.out.println(configuration.get("env"));
可能需要读取/设置配置属性。
你能告诉我怎样才能通过考试吗。 hadoop jar [...] -DsomeProperty=someValue
,进入我的etl工作?
2条答案
按热度按时间dohp0rv51#
驱动程序类应实现允许您使用toolrunner运行mapreduce作业的工具接口:
然后您就可以通过以下方式运行作业:
这意味着toolrunner解析的所有commannd行参数都将被转换为配置类的当前示例。
假设您使用以下命令从控制台运行作业:
然后在
run()
方法可以从配置类获取所有参数:fnatzsnv2#
你可以用两种方式传递论点。使用-d选项或使用配置。但在实现工具接口时只能使用-d选项。如果没有,则必须通过conf.set设置配置变量。
使用-d传递参数:
使用配置传递参数:
注意:在初始化作业类之前,必须设置所有配置变量