Oozie shell动作不以提交用户身份运行

8
我写了一个Oozie工作流,运行一个BASH shell脚本来执行一些Hive查询并对结果进行一些操作。脚本可以运行,但在访问某些HDFS数据时会抛出权限错误。提交Oozie工作流的用户有权限,但脚本正在以yarn用户身份运行。
是否可能使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。


你在凭证中设置了hcat.metastore.uri和hcat.metastore.principal吗? - Prashanth
2个回答

3
此问题将在所有使用简单安全性配置的集群中发生。您可以选择覆盖默认配置。在shell脚本开头包含以下语句即可解决此问题。
export HADOOP_USER_NAME=<Name of submitted user>;

1
你可以通过环境变量来运行。
<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>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接