我的目标是在hadoop集群上运行应用程序,而无需将显式配置放入每个应用程序。因此,我尝试将集群的配置放入env变量中,并将它们传播到集群中的每个节点。
例如,我定义:
export HIVE2_JDBC_URL=jdbc:hive2://localhost:10000
以后像这样使用:
beeline -u $HIVE2_JDBC_URL/<db_name> -e "SELECT * FROM <table_name>;"
虽然这适用于这个特定的用例(在cli中),但它有两大缺点:
我必须手动更新每个节点上的env变量
oozie工作流无法读取环境变量
有没有一种方法可以使用ambari来检索这些设置?我是否可以定义自己的自定义设置,这些设置在每个节点上都可用?有没有一种方法也适用于oozie工作流?
1条答案
按热度按时间envsm3lx1#
您可以通过
mapred-site.xml
以及yarn-site.xml
--但我不能100%确定在resourcemanager服务和/或每个nodemanager服务和/或客户机节点的配置中必须设置哪些属性。以及哪个级别覆盖(或添加)哪个级别。你得做些研究和实验。查阅文档
mapred-default.xml
以及yarn-default.xml
(例如,hadoop2.7.0中的here和here)属性,例如。。。[编辑]还可以查看那些在“default”列表中没有正确条目的属性(另一个文档错误…),忘记“mapred.child”内容
对于oozie作业,有两种设置env的方法。变量:
shell操作具有显式
<env-var>VAR=VALUE</env-var>
语法,因为shell脚本非常依赖env。变量所有使用“启动器”Yarn作业的操作(即java、pig、sqoop、spark、hive、hive2、shell…)都可以从
<property>
<name>oozie.launcher....env</name><value>****</value>
</property>
覆盖上面提到的客户端配置文件中的值mapreduce操作是直接启动的,没有“launcher”作业,因此属性将直接设置为
<property>
<name>...env</name><value>****</value>
</property>
此外,在核心工作流模式(即java、pig、mapreduce)中定义的操作可以使用<global>
只定义一次属性=>唉,其他操作被定义为具有不同xml模式的插件,并且不继承全局属性。。。
不幸的是,oozie的文档(例如这里的oozie4.1)对
oozie.launcher.*
属性,您必须对堆栈溢出进行一些研究——例如,在那篇文章中。