有什么办法可以将HADOOP_USER_NAME声明为oozie工作流程中的全局变量?实际上,我为我的项目创建了几个shell操作,但为每个shell操作声明一个HADOOP_USER_NAME效率不高,这就是为什么我想知道全局变量是否可以在这个中发生场景,如果是这样,我该怎么办呢......
非常感谢您的帮助。
这是我使用
的代码<workflow-app name="My_Workflow" xmlns="uri:oozie:workflow:0.5">
<global>
<configuration>
<property>
<name>HADOOP_USER_NAME</name>
<value>*****</value>
</property>
</configuration>
</global>
<start to="shell-a0a5"/>
<kill name="Kill">
<message>Error [${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<action name="shell-a0a5">
<shell xmlns="uri:oozie:shell-action:0.1">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<exec>script1.sh</exec>
<file>script1.sh#script1.sh</file>
</shell>
<ok to="End"/>
<error to="Kill"/>
</action>
<end name="End"/>
出于某种原因,我没有从HADOOP_USER_NAME获取价值,也许我做错了,我不得不将其写入shell文件中,因为导出HADOOP_USER_NAME = ****;
答案 0 :(得分:1)
您可以在工作流的顶部添加全局标记,该标记充当该workflow.xml中操作的全局配置
<workflow-app xmlns="uri:oozie:workflow:0.4" name="wf-name">
<global>
<job-tracker>${job-tracker}</job-tracker>
<name-node>${namd-node}</name-node>
<job-xml>job1.xml</job-xml>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
<name>HADOOP_USER_NAME</name>
<value>${username}</value>
</property>
</configuration>
答案 1 :(得分:1)
您可以将<property>
传递给运行 Java 实用程序的任何类型的Oozie操作,但不能传递给shell操作。
在您的具体情况下,您可以在每个 shell操作中本地声明<env-var>
,并且您可以全局定义该变量的实际值...
<parameter>
部分或在提交时的配置文件中
&lt; workflow-app name ='hello-wf'xmlns =“uri:oozie:workflow:0.4”&gt;
&LT;参数&GT;
&LT;性&gt;
&LT;名称&gt;&hadoopUser LT; /名称&gt;
&LT;值GT; biloute&LT; /值GT;
&LT; /性&gt;
&LT; /参数&GT;
...
&lt; action name ='some-shell'&gt;
&lt; shell xmlns =“uri:oozie:shell-action:0.1”&gt;&gt;
&LT;作业跟踪器&GT; $ {的JobTracker}&LT; /作业跟踪器&GT;
&LT;名称节点&GT; $ {名称节点}&LT; /名称节点&GT;
&LT; EXEC&GT; script1.sh&LT; / EXEC&GT;
&LT; ENV-VAR&GT; HADOOP_USER = NAME = $ {hadoopUser}&LT; / env的-VAR&GT;
&LT;文件&gt; script1.sh#script1.sh&LT; /文件&gt;
&LT; /壳&GT;
&lt; ok to =“End”/&gt;
&lt; error to =“Kill”/&gt;
&LT; /作用&gt;
...