2016-01-27 102 views
2

我是Oozie的新手,我已經閱讀了一些Oozie shell操作示例,但是這讓我對某些事情感到困惑。Oozie shell操作:exec和文件標籤

有些例子我看過沒有<file>標籤。

一些示例,像Cloudera的here,重複文件標籤殼腳本:

<shell xmlns="uri:oozie:shell-action:0.2"> 
    <exec>check-hour.sh</exec> 
    <argument>${earthquakeMinThreshold}</argument> 
    <file>check-hour.sh</file> 
</shell> 

儘管在Oozie's website,寫殼腳本(從job.properties基準${EXEC},它指向script.sh文件)兩次,用#分隔。

<shell xmlns="uri:oozie:shell-action:0.1"> 
    ... 
    <exec>${EXEC}</exec> 
    <argument>A</argument> 
    <argument>B</argument> 
    <file>${EXEC}#${EXEC}</file> 
</shell> 

還有一些例子我見過所在的路徑(HDFS或地方?)是<file>標籤內的script.sh#script.sh之前預先考慮。

<shell xmlns="uri:oozie:shell-action:0.1"> 
    ... 
    <exec>script.sh</exec> 
    <argument>A</argument> 
    <argument>B</argument> 
    <file>/path/script.sh#script.sh</file> 
</shell> 

據我所知,任何外殼腳本文件可以包括在工作流路徑HDFS(其中workflow.xml駐留相同的路徑)。

有人可以解釋這些示例中的差異以及如何使用<exec>,<file>,script.sh#script.sh/path/script.sh#script.sh

回答

9

<file>hdfs:///apps/duh/mystuff/check-hour.sh</file>意味着「下載HDFS文件到一個運行了Oozie啓動了殼牌行動紗線容器的當前工作目錄,默認情況下使用相同的文件名,這樣我可以參考它作爲./check-hour.sh或者乾脆check-hour.sh在<exec>元素「

<file>check-hour.sh</file>意味着「將HDFS文件 - 從我的用戶的家庭目錄例如hdfs:///user/borat/check-hour.sh下載到等等」

<file>hdfs:///apps/duh/mystuff/check-hour.sh#youpi</file>裝置「下載該文件HDFS等等,等等,將其重命名爲youpi,這樣我可以在元件引用它作爲./youpi或簡單地youpi

請注意,色相用戶界面通常會插入不必要的#而不更改名稱。這就是爲什麼你會經常看到它。

+0

順便說一句,也許你想知道''元素的##語法的值是多少。在上面的例子中,它沒有任何價值。但考慮' /apps/bling/bling-hardcore-1.2.3.4-6-unplugged.jar#bling.jar'或' /apps/stuff/spark-1.6.0-withhive-1.2-dependencies。 zip#spark'以便您的Java或Shell操作可以期望預定義的名稱來構建CLASSPATH ... –