我编写了一个Oozie工作流,该工作流运行BASH shell脚本来执行一些配置单元查询并对结果执行某些操作。该脚本运行但在访问某些HDFS数据时会引发权限错误。提交Oozie工作流程的用户具有权限,但脚本以纱线用户身份运行。
是否可以让Oozie以提交工作流程的用户身份执行脚本? Hive和Java操作都以提交的用户身份执行,只是shell的行为方式不同。
这是我的Oozie行动的粗略轮廓
<action name="start_action"
retry-max="12"
retry-interval="600">
<shell xmlns="uri:oozie:shell-action:0.1">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<job-xml>${WorkflowRoot}/hive-site.xml</job-xml>
<exec>script.sh</exec>
<file>${WorkflowRoot}/script.sh</file>
<capture-output />
</shell>
<ok to="next_action"/>
<error to="send_email"/>
</action>
我正在运行Oozie 4.1.0和HDP 2.1。
答案 0 :(得分:3)
在使用简单安全性配置的所有群集中都会发生此问题。您可以选择覆盖默认配置。在shell脚本的开头包含以下语句将解决此问题。
export HADOOP_USER_NAME=<Name of submitted user>;
答案 1 :(得分:0)
您可以在env-var的帮助下进行运行
<env-var>HADOOP_USER_NAME=${wf:user()}</env-var>
<workflow-app xmlns="uri:oozie:workflow:0.3" name="shell-wf">
<start to="shell-node"/>
<action name="shell-node">
<shell xmlns="uri:oozie:shell-action:0.1">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
</configuration>
<exec>test.sh</exec>
<env-var>HADOOP_USER_NAME=${wf:user()}</env-var>
<file>/user/root/test.sh</file>
</shell>
<ok to="end"/>
<error to="fail"/>
</action>
<kill name="fail">
<message>Shell action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end"/>
</workflow-app>