我試圖通過oozie執行shell腳本,但我遇到了一些問題。通過oozie運行shell腳本
我有這樣的(import.properties)屬性文件:
startIndex=2000
chunkSize=2000
的想法是,在每一個執行的startIndex值將由塊大小更新。所以如果我執行它,它應該有
startIndex=4000
chunkSize=2000
我已經單獨測試了腳本,它工作正常。這是我的其他相關文件。
job.properties
nameNode=hdfs://192.168.56.101:8020
jobTracker=192.168.56.101:50300
wfeRoot=wfe
queueName=default
EXEC=script.sh
propertyLoc=import.properties
oozie.use.system.libpath=true
oozie.wf.application.path=${nameNode}/user/${user.name}/${wfeRoot}/coordinator
workflow.xml
<workflow-app xmlns='uri:oozie:workflow:0.2' name='shell-wf'>
<start to='shell1' />
<action name='shell1'>
<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>${EXEC}</exec>
<file>${EXEC}#${EXEC}</file>
<file>${propertyLoc}#${propertyLoc}</file>
</shell>
<ok to="end" />
<error to="fail" />
</action>
<kill name="fail">
<message>Script failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name='end' />
script.sh
#!/bin/sh
file=import.properties
. $file
SCRIPT=$(readlink -f $file)
SCRIPTPATH=$(dirname $SCRIPT)
echo $SCRIPTPATH
newStartIndex=`expr $chunkSize + $startIndex`
newStartIndexStr=startIndex=$newStartIndex
oldStartIndexStr=startIndex=$startIndex
chunkSizeStr=chunkSize=$chunkSize
sed -i "s|$oldStartIndexStr|$newStartIndexStr|g" $file
我把我HDFS工作目錄中的所有這些文件:
[[email protected] coordinator]$ hadoop fs -lsr /user/ambari_qa/wfe/coordinator
-rw-rw-rw- 1 ambari_qa hdfs 32 2013-05-09 00:12 /user/ambari_qa/wfe/coordinator/import.properties
-rw-rw-rw- 1 ambari_qa hdfs 533 2013-05-09 01:19 /user/ambari_qa/wfe/coordinator/script.sh
-rw------- 1 ambari_qa hdfs 852 2013-05-09 00:50 /user/ambari_qa/wfe/coordinator/workflow.xml
我期待每次執行後都會更改import.properties文件。但是,即使oozie工作成功,我也發現這並沒有改變。爲了調試的目的,我在執行過程中打印出來的文件的位置,並發現它複製到另一個位置(從日誌):
>>> Invoking Shell command line now >>
Stdoutput /hadoop/mapred/taskTracker/ambari_qa/distcache/-5756672768810005023_889271025_125659265/192.168.56.101/user/ambari_qa/wfe/coordinator
Stdoutput startIndex=4000
Stdoutput startIndex=2000
Exit code of the Shell command 0
<<< Invocation of Shell command completed <<<
我需要做的,這樣它的影響HDFS的工作目錄是什麼?提前致謝。
更新:
改變基於克里斯的建議,該腳本之後,就變成(最後3行):
hadoop fs -rm hdfs://ip-10-0-0-92:8020/user/ambari_qa/wfe/shell-oozie/$file
sed -i "s|$oldStartIndexStr|$newStartIndexStr|g" $file
hadoop fs -put $file /user/ambari_qa/wfe/shell-oozie
但後來,我開始對着權限問題。我給了該文件和文件夾的寫入權限。
[[email protected] shell-oozie]$ hadoop fs -ls /user/ambari_qa/wfe/shell-oozie
找到3項:
-rw-rw-rw- 3 ambari_qa hdfs 32 2013-05-10 16:55 /user/ambari_qa/wfe/shell-oozie/import.properties
-rw-rw-rw- 3 ambari_qa hdfs 540 2013-05-10 16:48 /user/ambari_qa/wfe/shell-oozie/script.sh
-rw-rw-rw- 3 ambari_qa hdfs 826 2013-05-10 15:29 /user/ambari_qa/wfe/shell-oozie/workflow.xml
以下是錯誤日誌:
rm: org.apache.hadoop.security.AccessControlException: Permission denied: user=mapred, access=EXECUTE, inode="ambari_qa":ambari_qa:hdfs:rwxrwx---
put: org.apache.hadoop.security.AccessControlException: Permission denied: user=mapred, access=EXECUTE, inode="ambari_qa":ambari_qa:hdfs:rwxrwx---
Failing Oozie Launcher, Main class [org.apache.oozie.action.hadoop.ShellMain], exit code [1]
感謝您的答覆了很多克里斯
我可以通過添加
hadoop_user=${2} export HADOOP_USER_NAME=${hadoop_user}
hadoop_user作爲$通過解決這個問題。在此基礎上,我稍微改變了我的腳本 'Hadoop的FS -rm /用戶/ ambari_qa/WFE /協調員/ $文件 SED -i 「S | $ oldStartIndexStr | $ newStartIndexStr | G」 $文件 Hadoop的FS -put $ file/user/ambari_qa/wfe/coordinator' 但面臨權限問題。對於我想通過oozie工作流程修改的文件,應該期待什麼權限?再次感謝。 – dreamer 2013-05-10 15:51:55
oozie服務器是否以自己的用戶身份運行,和/或您是否在HDFS中啓用了用戶僞裝功能。基本上誰擁有該文件,並且可以發佈完整的異常消息(更新您的問題而不是評論) – 2013-05-10 17:28:08
再次感謝@Chris。我更新了我的問題。 – dreamer 2013-05-10 17:34:05