【问题标题】:Oozie - Hadoop commands are not executing (Shell)Oozie - Hadoop 命令未执行(Shell)
【发布时间】:2023-10-06 07:09:01
【问题描述】:

我正在运行一个包含 hadoop 命令的 shell 脚本。

执行相同的时候得到以下错误

主类[org.apache.oozie.action.hadoop.ShellMain],退出代码[1]

我正在使用 Cloudera Hue - Oozie 运行一个简单的 shell 脚本

但是,当脚本没有 hadoop 命令时,它会成功执行。

我已经设置了oozie.use.system.libpath=true 并且可以看到我的库在

user/oozie/share/lib/<lib_timestmap>

下面是我尝试运行的shell脚本

#! /bin/bash
$(hadoop fs -mkdir /<location path>)

Wokflow.xml

<workflow-app name="Shell-copy" xmlns="uri:oozie:workflow:0.4">
    <start to="Shell-copy"/>
    <action name="Shell-copy">
        <shell xmlns="uri:oozie:shell-action:0.1">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <exec>test.sh</exec>
            <file>/user/hue/oozie/workspaces/_rrv9kor_-oozie-38-1455857816.12/test.sh#test.sh</file>
              <capture-output/>
        </shell>
        <ok to="end"/>
        <error to="kill"/>
    </action>
    <kill name="kill">
        <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>
    <end name="end"/>
</workflow-app>
  • 带有 hadoop 命令的脚本要么抛出上述错误,要么显示为成功完成,但未处理任何 hadoop 命令,仅执行 echo 或其他 shell 命令。

【问题讨论】:

  • 我建议您查看实际的堆栈跟踪,而不是仅仅想知道。在 oozie 日志中搜索 job_00000000_0000 之类的标签,然后在 YARN 日志中搜索该作业,参见。 *.com/questions/34344114/…
  • 嗨 Samson.,发现这是一个权限问题

标签: shell hadoop cloudera oozie hue


【解决方案1】:

shell 操作的问题在于,shell 作业被部署为“mapred”用户。由于上面是从 mapred user 以外的用户帐户部署 oozie 作业,因此引发了 Permission Denied 错误。解决此问题的方法是将 HADOOP_USER_NAME 环境变量设置为您部署 oozie 工作流所使用的用户帐户名称。

<env-var>HADOOP_USER_NAME=user_name_goes_here</env-var>

【讨论】:

  • 在提交 Oozie 作业时简单地设置属性user.name 怎么样? (实际上我从未尝试过 - 总是使用预设“用户”的 Kerberos 身份验证)
  • 是的.. 当您手动描述您的工作属性或工作流 xml 时,您可以。当我使用 Hue oozie 编辑器进行上述操作时,dint 探索了这样做的选择
  • 我可以知道我应该在哪里添加这个环境变量吗?那是 .bashrc 吗?谢谢