我的目标是在我们的Hadoop集群上运行应用程序,而无需将显式配置放入每个应用程序中。因此,我试图将集群的配置放入ENV变量并将它们传播到集群中的每个节点。
例如我定义:
export HIVE2_JDBC_URL=jdbc:hive2://localhost:10000
稍后将使用它:
beeline -u $HIVE2_JDBC_URL/<db_name> -e "SELECT * FROM <table_name>;"
虽然这适用于这个特定用例(在cli中),但它有两个很大的缺点:
有没有办法使用Ambari检索此设置,我可以定义自己的自定义设置,然后在每个节点上可用吗?是否有一种方法也适用于Oozie工作流程?
答案 0 :(得分:2)
您可以通过mapred-site.xml
和yarn-site.xml
强制“群集范围”环境变量 - 但我不能100%确定必须在配置中设置哪些属性 ResourceManager 服务,和/或每个 NodeManager 服务和/或客户端节点。哪个级别覆盖(或增加)哪个级别。你将不得不做一些研究和实验
查看mapred-default.xml
和yarn-default.xml
(例如here和here for Hadoop 2.7.0)的文档,了解...等属性
mapred.child.env
mapreduce.admin.user.env
yarn.app.mapreduce.am.env
yarn.app.mapreduce.am.admin.user.env
yarn.nodemanager.admin-env
yarn.nodemanager.env-whitelist
[编辑] 还要查看这些属性,这些属性在“默认”列表中没有正确的条目(还有另一个文档错误......)而忘记了“mapred.child”的东西
mapreduce.map.env
mapreduce.reduce.env
<小时/> 对于 Oozie作业,有两种方法可以设置env。变量:
<env-var>VAR=VALUE</env-var>
语法,因为shell脚本在env上依赖很多。变量<property>
<name>oozie.launcher.xxx.xxx.xxx.env</name><value>****</value>
</property>
<property>
<name>xxx.xxx.xxx.env</name><value>****</value>
部分仅定义属性一次不幸的是Oozie的文档(例如O {here对于Oozie 4.1)对</property>
属性完全保持沉默,你必须在Stack Overflow中进行一些研究 - 在that post中示例