在分布式hadoop集群中使用env变量

vfhzx4xs  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(452)

我的目标是在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工作流?

envsm3lx

envsm3lx1#

您可以通过 mapred-site.xml 以及 yarn-site.xml --但我不能100%确定在resourcemanager服务和/或每个nodemanager服务和/或客户机节点的配置中必须设置哪些属性。以及哪个级别覆盖(或添加)哪个级别。你得做些研究和实验。
查阅文档 mapred-default.xml 以及 yarn-default.xml (例如,hadoop2.7.0中的here和here)属性,例如。。。

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

[编辑]还可以查看那些在“default”列表中没有正确条目的属性(另一个文档错误…),忘记“mapred.child”内容

mapreduce.map.env 
mapreduce.reduce.env

对于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.* 属性,您必须对堆栈溢出进行一些研究——例如,在那篇文章中。

相关问题