在分布式Hadoop集群

时间:2016-08-29 13:39:38

标签: hadoop oozie ambari bigdata

我的目标是在我们的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工作流程无法从ENV变量读取

有没有办法使用Ambari检索此设置,我可以定义自己的自定义设置,然后在每个节点上可用吗?是否有一种方法也适用于Oozie工作流程?

1 个答案:

答案 0 :(得分:2)

您可以通过mapred-site.xmlyarn-site.xml强制“群集范围”环境变量 - 但我不能100%确定必须在配置中设置哪些属性 ResourceManager 服务,和/或每个 NodeManager 服务和/或客户端节点。哪个级别覆盖(或增加)哪个级别。你将不得不做一些研究和实验

查看mapred-default.xmlyarn-default.xml(例如herehere 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。变量:

  • Shell操作具有明确的<env-var>VAR=VALUE</env-var>语法,因为shell脚本在env上依赖很多。变量
  • 使用“启动器”YARN作业(即Java,Pig,Sqoop,Spark,Hive,Hive2,Shell ......)的所有操作都可以受益于{{1 } <property>
    <name>oozie.launcher.xxx.xxx.xxx.env</name><value>****</value>
    覆盖上面提到的客户端配置文件中的值
  • MapReduce操作直接启动,没有“启动器”作业,因此该属性将直接设置为
    </property>
    <property>
    {{1 }}
  • 此外,核心工作流架构(即Java,Pig,MapReduce)中定义的操作可以使用<name>xxx.xxx.xxx.env</name><value>****</value>部分仅定义属性一次
    =&gt ;唉,其他操作被定义为具有不同XML模式的插件,并且不会继承全局属性......

不幸的是Oozie的文档(例如O {here对于Oozie 4.1)对</property>属性完全保持沉默,你必须在Stack Overflow中进行一些研究 - 在that post中示例

相关问题