我是Oozie的新手,我读过一些Oozie shell动作示例,但这让我对某些事情感到困惑。
我见过的例子中没有<file>
标记。
某些示例,如Cloudera here,在文件标记中重复shell脚本:
<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中,写入shell脚本(来自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或本地?)位于script.sh#script.sh
标记内的<file>
之前。
<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>
据我所知,任何shell脚本文件都可以包含在工作流HDFS路径中(workflow.xml所在的路径)。
有人可以解释这些示例中的差异以及如何使用<exec>
,<file>
,script.sh#script.sh
和/path/script.sh#script.sh
吗?
答案 0 :(得分:13)
<file>hdfs:///apps/duh/mystuff/check-hour.sh</file>
表示&#34;将该HDFS文件下载到运行Oozie Launcher for Shell操作的YARN容器的当前工作目录中,默认情况下使用相同的文件名,以便我可以在&lt; exec&gt;中将其引用为./check-hour.sh
或简称为check-hour.sh
元素&#34;
<file>check-hour.sh</file>
表示&#34;从我的用户家庭目录下载该HDFS文件,例如hdfs:///user/borat/check-hour.sh
- 等等。&#34; 。
<file>hdfs:///apps/duh/mystuff/check-hour.sh#youpi</file>
表示&#34;下载该HDFS文件等,将其重命名为youpi
,以便我可以将其引用为./youpi
或简称为{{元素中的1}}&#34; 。
请注意,Hue UI通常会插入不必要的youpi
内容而不会更改实际名称。这就是为什么你会经常看到它的原因。