Oozie 講解

* Oozie部署

(與之前幾節(jié)內(nèi)容重復(fù)則不再贅述,比如解壓,安裝之類的)

1、 Hadoop已經(jīng)成功安裝并配置

2、 解壓Oozie到指定目錄

3、 配置文件

core-site.xml

添加屬性:

hadoop.proxyuser.z.hosts:*,即:OOZIE_SERVER_HOSTNAME

hadoop.proxyuser.z.groups:*,即:USER_GROUPS_THAT_ALLOW_IMPERSONATION

如圖:

尖叫提示:如果你的集群不是單節(jié)點(diǎn)狀態(tài),則需要把該core-site.xml文件scp到集群中的其他機(jī)器,此處為z02,z03機(jī)器。

尖叫提示:你還需要開啟mr-jobhistory-daemon.sh服務(wù)

4、 如果HDFS已經(jīng)開啟,則需要重啟Hadoop的DFS系統(tǒng)

5、解壓hadooplibs

$ tar -zxf /opt/modules/cdh/oozie-4.0.0-cdh5.3.6/oozie-hadooplibs-4.0.0-cdh5.3.6.tar.gz -C /opt/modules/cdh/

注意,解壓之后,你會(huì)發(fā)現(xiàn)hadooplibs直接在Oozie目錄下了,是以內(nèi)壓縮包的根目錄結(jié)構(gòu)就是Oozie根目錄。

6、在Oozie的根目錄下,創(chuàng)建libext/目錄

$ mkdir libext/

7、將hadooplibs里面的jar包,拷貝到libext目錄下

$ cp -ra /opt/modules/cdh/oozie-4.0.0-cdh5.3.6/hadooplibs/hadooplib-2.5.0-cdh5.3.6.oozie-4.0.0-cdh5.3.6/* libext/

8、將ext-2.2.zip拷貝到libext/目錄下

$ cp /opt/softwares/ext-2.2.zip libext/

9、修改配置文件

oozie-site.xml,修改如下屬性,注意,不是替換,只是修改,如圖:

10、由于Oozie需要數(shù)據(jù)庫支持,所以需要安裝一個(gè)Mysql數(shù)據(jù)庫

由于之前已經(jīng)安裝了Mysql了,此處不再贅述如何安裝Mysql。

創(chuàng)建一個(gè)oozie數(shù)據(jù)庫,然后把mysql驅(qū)動(dòng)jar拷貝至libext,操作如下:

$ mysql -uroot -p123456

mysql> create database oozie;

exit;

$ cp /opt/modules/mysql-connector-java-5.1.27/mysql-connector-java-5.1.27-bin.jar /opt/modules/cdh/oozie-4.0.0-cdh5.3.6/libext/

11、設(shè)置oozie

** 上傳oozie目錄下的yarn.tar.gz(會(huì)自行解壓)文件到HDFS

命令如下:

$ bin/oozie-setup.sh sharelib create -fs hdfs://z01:8020 -locallib oozie-sharelib-4.0.0-cdh5.3.6-yarn.tar.gz,執(zhí)行后如圖,注意,該指令一定要在活躍的NameNode節(jié)點(diǎn)執(zhí)行。如果不在,請(qǐng)自行想辦法。(方式之前小節(jié)已經(jīng)講解)

** 創(chuàng)建oozie.sql文件

$ bin/oozie-setup.sh db create -run -sqlfile oozie.sql,如圖則成功:

** 打包項(xiàng)目,生成war

$ bin/oozie-setup.sh prepare-war,如圖則成功:

** 啟動(dòng)oozie,通過瀏覽器訪問oozie界面

$ bin/oozied.sh start

地址:http://192.168.122.200:11000/oozie,界面如圖:

* 案例

例1:oozie調(diào)度shell腳本

** 解壓oozie根目錄下的案例

$ tar -zxf oozie-examples.tar.gz

** 創(chuàng)建自定義任務(wù)文件夾,并拷貝任務(wù)模板

$ mkdir oozie-apps/

$ cp -r examples/apps/shell/ oozie-apps/

** 創(chuàng)建腳本p1.sh,隨便寫一個(gè)任務(wù)啦,如圖:

** 修改job.properties和workflow.xml文件

job.properties:

workflow.xml:

** 上傳任務(wù)配置到HDFS

尖叫提示:任務(wù)配置文件每次在本地修改后,如需執(zhí)行,都需要重新上傳到HDFS,因?yàn)镺ozie不支持本地運(yùn)行。

上傳:

$ /opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/bin/hdfs dfs -put /opt/modules/cdh/oozie-4.0.0-cdh5.3.6/oozie-apps/ /user/z/

** 提交執(zhí)行該任務(wù)

$ bin/oozie job -oozie http://z01:11000/oozie -config oozie-apps/shell/job.properties -run,在Oozie界面可以看到:

查看tmp目錄下生成的p1.log文件如下:

尖叫提示:

現(xiàn)象:你執(zhí)行了某個(gè)任務(wù),通過shell腳本向本地tmp目錄下寫.log文件,然后,找不到?

原因:排除你任務(wù)執(zhí)行失敗之外,看一看你的其他機(jī)器對(duì)應(yīng)目錄是否有.log文件生成?

解釋:因?yàn)閟hell腳本執(zhí)行為當(dāng)前機(jī)器節(jié)點(diǎn),所以在resourcemanager調(diào)度任務(wù)給某一個(gè)NodeManager

執(zhí)行時(shí),該.log日志文件的生成會(huì)在任務(wù)執(zhí)行所在的NodeManager節(jié)點(diǎn)上生成。

** 殺掉某個(gè)任務(wù)

當(dāng)任務(wù)卡死或者無效,可以選擇殺死該任務(wù)

$ bin/oozie job -oozie http://z01:11000/oozie -kill 0000004-170425105153692-oozie-z-W

例2:執(zhí)行多個(gè)Job調(diào)度

** 創(chuàng)建兩個(gè)shell腳本

此處我直接利用剛才的p1.sh復(fù)制出來一個(gè)p2.sh

$ cp -a oozie-apps/shell/p1.sh oozie-apps/shell/p2.sh

改變p2.sh如圖:

注意ls命令的絕對(duì)路徑不是sbin

對(duì)應(yīng)的配置文件,修改如圖所示:

job.properties:

workflow.xml:

** 上傳后,執(zhí)行該任務(wù),不再贅述。該任務(wù)流程為:先執(zhí)行action1,如果action1成功,則執(zhí)行action2,然后結(jié)束,否則直接結(jié)束。

此處可以看到,運(yùn)行結(jié)果:

尖叫提示:重新上傳前,需要先刪除HDFS中的oozie-apps文件夾

例3:調(diào)度mapreduce任務(wù)

** 首先拷貝示例模板

$ cp -r examples/apps/map-reduce/ oozie-apps/

** 刪除map-reduce/lib目錄下示例的jar包,一會(huì)存放自己的jar

$ rm -rf oozie-apps/map-reduce/lib/*

** 在DFS系統(tǒng)中創(chuàng)建input文件夾并傳入words.txt文件,然后運(yùn)行測試前幾節(jié)我們打包好的Jar包,即單詞統(tǒng)計(jì)任務(wù)(這一步在之前的HDFS講解中重復(fù)很多遍了,所以不在贅述)

$ /opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/bin/hdfs dfs -mkdir /input/

$ /opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/bin/hdfs dfs -put /opt/modules/hadoop-2.5.0/words.txt /input/

$ /opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/bin/yarn jar /opt/modules/hadoop-2.5.0/MyWordCount.jar /input/ /output/

$ /opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/bin/hdfs dfs -cat /output/par*,一頓操作后,結(jié)果如圖:

** 配置文件

job.properties:

workflow.xml:

一定要指定key和value是輸出類型

注意,配置workflow.xml文件時(shí),里面的property屬性需要結(jié)合具體情況配置,比如我剛才已經(jīng)運(yùn)行了一個(gè)MyWordCount任務(wù)了,我可以通過yarn平臺(tái)的界面來查找相關(guān)屬性,打開8088端口界面,找到剛才運(yùn)行的任務(wù),點(diǎn)擊history:

然后出現(xiàn)如下界面,點(diǎn)擊Configuration:

然后在右上角搜索api這個(gè)關(guān)鍵字:

綠色框體中的內(nèi)容即為屬性名,藍(lán)色窗體即為屬性值,大家自己對(duì)應(yīng)查找即可,然后完成workflow.xml文件的配置。

** 拷貝MyWordCount.jar到oozie-apps/map-reduce/lib目錄下

這里根據(jù)我的情況,我之前的MyWordCount.jar包存放于另外一個(gè)hadoop目錄下了,所以:

$ cp -a /opt/modules/hadoop-2.5.0/MyWordCount.jar oozie-apps/map-reduce/lib/

** 上傳map-reduce目錄到HDFS的oozie-apps目錄

$ /opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/bin/hdfs dfs -put oozie-apps/map-reduce/ /user/z/oozie-apps/

** 運(yùn)行任務(wù)

$ bin/oozie job -oozie http://z01:11000/oozie -config oozie-apps/map-reduce/job.properties -run,成功結(jié)果如圖:

例4:使用Coordinator周期性調(diào)度任務(wù)

** 配置時(shí)區(qū)

如圖:+0800是東八區(qū)區(qū)時(shí),如果不是此時(shí)區(qū),查詢?nèi)绾涡薷臅r(shí)區(qū),在此不贅述。

** 修改oozie-site.xml文件

添加如下屬性,該屬性可以去oozie-default.xml文件中查找

** 修改oozie-console.js文件中的時(shí)區(qū)設(shè)定

$ cat /opt/modules/cdh/oozie-4.0.0-cdh5.3.6/oozie-server/webapps/oozie/oozie-console.js,搜索TimeZone函數(shù),修改為如下:

** 重啟oozie,并清除瀏覽器緩存,不放心的話,可以換另一個(gè)瀏覽器打開即可

$ bin/oozied.sh stop

$ bin/oozied.sh start

** 拷貝coordinator周期任務(wù)模板

首先,還是先去examples里面拷貝個(gè)任務(wù)配置模板出來

$ cp -r examples/apps/cron/ oozie-apps/

** 修改job.properties、coordinator.xml文件,workflow文件就用案例1的即可。

由于我打算讓coordinator來調(diào)度案例1的workflow任務(wù),所以,先把案例1的workflow.xml復(fù)制到cron目錄下。

$ cp oozie-apps/shell/workflow.xml oozie-apps/cron/

當(dāng)然了,還有那個(gè)具體的腳本p1.sh和p2.sh

$ cp oozie-apps/shell/p1.sh oozie-apps/shell/p2.sh oozie-apps/cron/

然后修改job.properties文件:

然后修改coordinator.xml文件:

修改內(nèi)容:frequency修改為5分鐘執(zhí)行一次,時(shí)區(qū)修改為GMT+0800,注意,coordinator執(zhí)行頻率最小為5分鐘一次。

** 運(yùn)行測試

先上傳cron目錄到HDFS

$ /opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/bin/hdfs dfs -put oozie-apps/cron/ /user/z/oozie-apps/

$ bin/oozie job -oozie http://z01:11000/oozie -config oozie-apps/cron/job.properties -run

請(qǐng)自行觀察其5分鐘執(zhí)行一次,執(zhí)行到明天結(jié)束。

* 總結(jié)

oozie調(diào)度框架的學(xué)習(xí),如果概念不了解,可以先在似懂非懂的狀態(tài)下把例子學(xué)會(huì),再回顧知識(shí)點(diǎn),自然就理解了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、運(yùn)行環(huán)境 主機(jī)IP 主機(jī)名 2、配置主機(jī)名(分別在五臺(tái)機(jī)器上執(zhí)行) hostname +主機(jī)名例如: h...
    獻(xiàn)給記性不好的自己閱讀 3,792評(píng)論 0 6
  • 為什么需要任務(wù)調(diào)度框架 在進(jìn)行數(shù)據(jù)處理的時(shí)候,需要進(jìn)行數(shù)據(jù)采集、數(shù)據(jù)清洗、數(shù)據(jù)分析等操作,每一個(gè)過程都可能涉及到多...
    心_的方向閱讀 6,356評(píng)論 1 6
  • 自定義實(shí)現(xiàn)wordcount的workflow 在yarn上測試wordcount程序 生產(chǎn)一個(gè)應(yīng)用目錄,并把wo...
    心_的方向閱讀 8,114評(píng)論 2 4
  • 下午給孩子們進(jìn)行樂團(tuán)排練,孩子們很積極,又快樂。我真的很開心,這就是我最終理想的前期形態(tài)??梢栽谒囆g(shù)的海洋里鉆研,...
    TA77高振華閱讀 270評(píng)論 2 3
  • 清明,一場傾盆大雨 和往常一樣 卻又不同于往常 那雨下的那么大 連續(xù)下了幾天幾夜 時(shí)而如瀑布般一瀉千里 時(shí)而剪不斷...
    隨筆i閱讀 350評(píng)論 2 4

友情鏈接更多精彩內(nèi)容