用Hue中的Oozie執行Impala Sheel指令碼
在Oozie中不能像執行hive SQL那樣直接執行impala SQL指令碼。目前沒有Impala操作,因此你必須使用呼叫impala-shell的shell操作。呼叫impala-shell的shell指令碼中還必須包含設定PYTHON EGGS位置的環境變數。這是一個shell指令碼(impala_overwrite.sh)示例:
export PYTHON_EGG_CACHE=./myeggs
/usr/bin/kinit -kt YourKeytabFile.keytab -V<your username> #這條是可選的
impala-shell -q "invalidatemetadata"
#也可使用-f引數執行一個impala SQL檔案
# impala-shell -f "impala_test.sql"
注意:如果不設定PYTHON_EGG_CACHE的位置,這個job將執行失敗(執行workflow job時會報Main class [org.apache.oozie.action.hadoop.ShellMain], exitcode [1] 錯誤)。
在kerberized叢集的情況下,這也做了kinit。這是使用該指令碼的工作流程:
<workflow-appname="shell-impala-invalidate-wf"xmlns="uri:oozie:workflow:0.4">
<startto="shell-impala-invalidate"/>
<actionname="shell-impala-invalidate">
<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>shell-impala-invalidate.sh</exec>
<file>shell-impala-invalidate.sh#shell-impala-invalidate.sh</file>
<file>YourKeytabFile.keytab#YourKeytabFile.keytab</file>
</shell>
<ok to="end"/>
<error to="kill"/>
</action>
<kill name="kill">
<message>Action failed, errormessage[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end"/>
</workflow-app>
必須將<file>標記包含在shell指令碼中;除非使用Kerberos,否則keytab部分是可選的。
在hue中Web UI的圖形介面配置如下:
1. 建立一個新的Workflow ,型別為shell
2. 選擇Shell指令碼的位置
需要把要執行的shell指令碼從本地put到Oozie workflow的hdfs的工作區目錄下,如下:
/user/hue/oozie/workspaces/hue-oozie-1519636855.0
如果shell指令碼放置的目錄不正確,在執行workflow job時會報Cannot run program "impala_overwrite.sh" … java.io.IOException:error=2, No such file or directory的錯誤:
3. 完成配置後成功執行workflow Job
4. 檢視workflow的配置