我正在使用 oozie 的 REST API 来调用 shell 脚本操作。任何包含访问或使用 HDFS 的脚本都会失败。
我用这个简单的脚本测试
#!/bin/bash -e
hadoop fs -touchz aaa
当我运行从命令行调用此脚本的 Oozie 工作流时——作为“root”——它工作正常。当我从 REST API 调用它时,它失败并显示错误代码 JA018 和错误消息:
Main class [org.apache.oozie.action.hadoop.ShellMain], exit code [1]
我确信我的 oozie 资产设置正确(即 job.properties 和 workflow.xml),因为如果我换出“touch /tmp/aaa”(即 linux touch 命令),工作流就会成功完成。
首先,我找不到 JA018 实际上是什么的明确文档。
其次(主要是),我认为我的错误的原因可能是权限。当脚本工作时(即,使用 linux touch 命令——而不是 HDFS touchz),我将作业属性user.name作为“root”传递给 Oozie REST 服务器。Oozie REST 服务器(根据 Cloudera 配置作为“oozie”运行)不会在“user.name”传递给它时运行作业(否则它可能会以“root”身份运行工作流并且它会工作)。有什么方法我需要配置 oozie ID 才能以我传递给它的 user.name 身份运行?我应该使用 root 以外的 ID 吗?(我使用 root 正是因为它拥有所有权限。)
似乎这是其他人会遇到的问题,但我在网上几乎没有发现任何问题。可能有一些我只是想念的标准方法。
我正在使用 Cloudera 4.1.3。
感谢您的任何想法/建议。