簡體   English   中英

REST API的簡單oozie shell操作失敗

[英]Simple oozie shell action from REST API fails

我正在使用oozie的REST API來調用Shell腳本操作。 任何包含訪問或使用HDFS的腳本都會失敗。

我用這個簡單的腳本進行測試

#!/bin/bash -e
hadoop fs -touchz aaa

當我運行從命令行(作為“ root”)調用此腳本的Oozie工作流時,它工作正常。 當我從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。

感謝您的任何想法/建議。

我的方法和假設都是錯誤的-因此就是問題所在。 事實證明,Oozie不支持這種事情,因為shell腳本是以與Oozie在HDFS內部進行填充的用戶不同的身份運行的。 換句話說,運行shell腳本會丟失Oozie在HDFS中執行操作的上下文。 因此,讓Oozie調用Shell腳本並期望它能夠在HDFS中執行操作是錯誤的方法。

Oozie的局限性在於它在HDFS中可以顯式執行的操作,但看來這是在Oozie中調用HDFS動作的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM