KEY |
含義 |
nameNode |
HDFS地址 |
jobTracker |
jobTracker(ResourceManager)地址 |
queueName |
Oozie隊列(默認填寫default) |
examplesRoot |
全局目錄(默認填寫examples) |
oozie.usr.system.libpath |
是否加載用戶lib目錄(true/false) |
oozie.libpath |
用戶lib庫所在的位置 |
oozie.wf.application.path |
Oozie流程所在hdfs地址(workflow.xml所在的地址) |
user.name |
當前用戶 |
oozie.coord.application.path |
Coordinator.xml地址(沒有可以不寫) |
oozie.bundle.application.path |
Bundle.xml地址(沒有可以不寫) |
使用oozie調度shell腳本
oozie安裝好了之後,需要測試oozie的功能是否完整好使,官方已經給我們帶了各種測試案例,我們可以通過官方提供的各種案例來對oozie進行調度
第一步:解壓官方提供的調度案例
oozie自帶了各種案例,我們可以使用oozie自帶的各種案例來作爲模板,所以我們這裏先把官方提供的各種案例給解壓出來
cd /export/servers/oozie-4.1.0-cdh5.14.0
tar -zxf oozie-examples.tar.gz
第二步:創建工作目錄
在任意地方創建一個oozie的工作目錄,以後調度任務的配置文件全部放到oozie的工作目錄當中去
我這裏直接在oozie的安裝目錄下面創建工作目錄
cd /export/servers/oozie-4.1.0-cdh5.14.0
mkdir oozie_works
第三步:拷貝任務模板到工作目錄當中去
任務模板以及工作目錄都準備好了之後,我們把shell的任務模板拷貝到我們oozie的工作目錄當中去
cd /export/servers/oozie-4.1.0-cdh5.14.0
cp -r examples/apps/shell/ oozie_works/
第四步:隨意準備一個shell腳本
cd /export/servers/oozie-4.1.0-cdh5.14.0
vim oozie_works/shell/hello.sh
注意:這個腳本一定要是在我們oozie工作路徑下的shell路徑下的位置
#!/bin/bash
echo "hello world" >> /export/servers/hello_oozie.txt
第五步:修改模板下的配置文件
修改job.properties
cd /export/servers/oozie-4.1.0-cdh5.14.0/oozie_works/shell
vim job.properties
nameNode=hdfs://node01:8020
jobTracker=node01:8032
queueName=default
examplesRoot=oozie_works
oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/shell
EXEC=hello.sh
修改workflow.xml
vim workflow.xml
<workflow-app xmlns="uri:oozie:workflow:0.4" name="shell-wf">
<start to="shell-node"/>
<action name="shell-node">
<shell xmlns="uri:oozie:shell-action:0.2">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
</configuration>
<exec>${EXEC}</exec>
<!-- <argument>my_output=Hello Oozie</argument> -->
<file>/user/root/oozie_works/shell/${EXEC}#${EXEC}</file>
<capture-output/>
</shell>
<ok to="end"/>
<error to="fail"/>
</action>
<decision name="check-output">
<switch>
<case to="end">
${wf:actionData('shell-node')['my_output'] eq 'Hello Oozie'}
</case>
<default to="fail-output"/>
</switch>
</decision>
<kill name="fail">
<message>Shell action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<kill name="fail-output">
<message>Incorrect output, expected [Hello Oozie] but was [${wf:actionData('shell-node')['my_output']}]</message>
</kill>
<end name="end"/>
</workflow-app>
第六步:上傳調度任務到hdfs上面去
注意:上傳的hdfs目錄爲/user/root,因爲我們hadoop啓動的時候使用的是root用戶,如果hadoop啓動的是其他用戶,那麼就上傳到
/user/其他用戶
cd /export/servers/oozie-4.1.0-cdh5.14.0
hdfs dfs -put oozie_works/ /user/root
第七步:執行調度任務
通過oozie的命令來執行調度任務
cd /export/servers/oozie-4.1.0-cdh5.14.0
bin/oozie job -oozie http://node03:11000/oozie -config oozie_works/shell/job.properties -run
從監控界面可以看到任務執行成功了
查看hadoop的19888端口,我們會發現,oozie啓動了一個MR的任務去執行shell腳本