1. 程式人生 > >用Hue中的Oozie執行Impala Sheel指令碼

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