2013-10-11 66 views
0

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

我用這個簡單的腳本

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

測試當我運行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。

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

回答

0

我的方法和假設是錯誤的 - 因此這個問題。事實證明,Oozie不支持這種事情,因爲shell腳本是作爲一個不同的用戶運行的,而Oozie正在將它作爲HDFS內部的東西運行。換句話說,運行shell腳本會丟失Oozie在HDFS中執行操作的上下文。因此,讓Oozie調用一個shell腳本並期望它能夠在HDFS中執行操作是錯誤的方法。 Oozie在HDFS中明確地做了些什麼,但似乎是在Oozie中調用HDFS操作的方式。