用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的配置