Oozie框架基礎
* Oozie框架基礎
官方文檔地址:http://oozie.apache.org/docs/4.0.0/DG_QuickStart.html
除Oozie之外,類似的框架還有:
** Zeus:https://github.com/michael8335/zeus2
** Azkaban:https://azkaban.github.io/
感興趣的朋友可以自行查閱。
Oozie框架簡介:
** Oozie單詞釋義:馴象人
** 一個基於工作流引擎的開源框架,由Cloudera公司貢獻給Apache,提供對Hadoop Mapreduce、Pig Jobs的任務調度與協調。Oozie需要部署到Java Servlet容器中運行。
** 以xml的形式寫調度流程,可以調度mr,pig,hive,shell,jar等。
Oozie主要功能:
** Workflow: 順序執行流程節點,支持fork(分支多個節點),join(合並多個節點為一個)
** Coordinator,定時觸發workflow
** Bundle Job,綁定多個coordinator
Oozie節點:
** 控制流節點(Control Flow Nodes):
控制流節點一般都是定義在工作流開始或者結束的位置,比如start,end,kill等。以及提供工作流的執行路徑機制,如decision,fork,join等。
** 動作節點(Action Nodes):
簡而不能再簡的言之,就是主要就是執行一些動作,比如FS ACTION,可以刪除HDFS上的文件,創建文件夾等等等等
接下來我們實際操作感受一下。
* Oozie下載
鏈接:http://pan.baidu.com/s/1hs85SdI 密碼:1bkq
* ext依賴包下載
Oozie的工作依賴於另一個library,ExtJS,WHY?該依賴包主要是提供一個Oozie的界面,如果不需要界面,可以省略。
鏈接:http://pan.baidu.com/s/1nvv40B3 密碼:x5n2
* Oozie部署
(與之前幾節內容重復則不再贅述,比如解壓,安裝之類的)
1、 Hadoop已經成功安裝並配置
2、 解壓Oozie到指定目錄
3、 配置文件
core-site.xml
添加屬性:
hadoop.proxyuser.z.hosts:*,即:OOZIE_SERVER_HOSTNAME
hadoop.proxyuser.z.groups:*,即:USER_GROUPS_THAT_ALLOW_IMPERSONATION
如圖:
尖叫提示:如果你的集群不是單節點狀態,則需要把該core-site.xml文件scp到集群中的其他機器,此處為z02,z03機器。
尖叫提示:你還需要開啟mr-jobhistory-daemon.sh服務
4、 如果HDFS已經開啟,則需要重啟Hadoop的DFS系統
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/
註意,解壓之後,你會發現hadooplibs直接在Oozie目錄下了,是以內壓縮包的根目錄結構就是Oozie根目錄。
6、在Oozie的根目錄下,創建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需要數據庫支持,所以需要安裝一個Mysql數據庫
由於之前已經安裝了Mysql了,此處不再贅述如何安裝Mysql。
創建一個oozie數據庫,然後把mysql驅動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、設置oozie
** 上傳oozie目錄下的yarn.tar.gz(會自行解壓)文件到HDFS
命令如下:
$ bin/oozie-setup.sh sharelib create -fs hdfs://z01:8020 -locallib oozie-sharelib-4.0.0-cdh5.3.6-yarn.tar.gz,執行後如圖,註意,該指令一定要在活躍的NameNode節點執行。如果不在,請自行想辦法。(方式之前小節已經講解)
** 創建oozie.sql文件
$ bin/oozie-setup.sh db create -run -sqlfile oozie.sql,如圖則成功:
** 打包項目,生成war
$ bin/oozie-setup.sh prepare-war,如圖則成功:
** 啟動oozie,通過瀏覽器訪問oozie界面
$ bin/oozied.sh start
地址:http://192.168.122.200:11000/oozie,界面如圖:
* 案例
例1:oozie調度shell腳本
** 解壓oozie根目錄下的案例
$ tar -zxf oozie-examples.tar.gz
** 創建自定義任務文件夾,並拷貝任務模板
$ mkdir oozie-apps/
$ cp -r examples/apps/shell/ oozie-apps/
** 創建腳本p1.sh,隨便寫一個任務啦,如圖:
** 修改job.properties和workflow.xml文件
job.properties:
workflow.xml:
** 上傳任務配置到HDFS
尖叫提示:任務配置文件每次在本地修改後,如需執行,都需要重新上傳到HDFS,因為Oozie不支持本地運行。
上傳:
$ /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/
** 提交執行該任務
$ bin/oozie job -oozie http://z01:11000/oozie -config oozie-apps/shell/job.properties -run,在Oozie界面可以看到:
查看tmp目錄下生成的p1.log文件如下:
尖叫提示:
現象:你執行了某個任務,通過shell腳本向本地tmp目錄下寫.log文件,然後,找不到?
原因:排除你任務執行失敗之外,看一看你的其他機器對應目錄是否有.log文件生成?
解釋:因為shell腳本執行為當前機器節點,所以在resourcemanager調度任務給某一個NodeManager
執行時,該.log日誌文件的生成會在任務執行所在的NodeManager節點上生成。
** 殺掉某個任務
當任務卡死或者無效,可以選擇殺死該任務
$ bin/oozie job -oozie http://z01:11000/oozie -kill 0000004-170425105153692-oozie-z-W
例2:執行多個Job調度
** 創建兩個shell腳本
此處我直接利用剛才的p1.sh復制出來一個p2.sh
$ cp -a oozie-apps/shell/p1.sh oozie-apps/shell/p2.sh
改變p2.sh如圖:
註意ls命令的絕對路徑不是sbin對應的配置文件,修改如圖所示:
job.properties:
workflow.xml:
** 上傳後,執行該任務,不再贅述。該任務流程為:先執行action1,如果action1成功,則執行action2,然後結束,否則直接結束。
此處可以看到,運行結果:
尖叫提示:重新上傳前,需要先刪除HDFS中的oozie-apps文件夾
例3:調度mapreduce任務
** 首先拷貝示例模板
$ cp -r examples/apps/map-reduce/ oozie-apps/
** 刪除map-reduce/lib目錄下示例的jar包,一會存放自己的jar
$ rm -rf oozie-apps/map-reduce/lib/*
** 在DFS系統中創建input文件夾並傳入words.txt文件,然後運行測試前幾節我們打包好的Jar包,即單詞統計任務(這一步在之前的HDFS講解中重復很多遍了,所以不在贅述)
$ /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*,一頓操作後,結果如圖:
** 配置文件
job.properties:
workflow.xml:
一定要指定key和value是輸出類型註意,配置workflow.xml文件時,裏面的property屬性需要結合具體情況配置,比如我剛才已經運行了一個MyWordCount任務了,我可以通過yarn平臺的界面來查找相關屬性,打開8088端口界面,找到剛才運行的任務,點擊history:
然後出現如下界面,點擊Configuration:
然後在右上角搜索api這個關鍵字:
綠色框體中的內容即為屬性名,藍色窗體即為屬性值,大家自己對應查找即可,然後完成workflow.xml文件的配置。
** 拷貝MyWordCount.jar到oozie-apps/map-reduce/lib目錄下
這裏根據我的情況,我之前的MyWordCount.jar包存放於另外一個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/
** 運行任務
$ bin/oozie job -oozie http://z01:11000/oozie -config oozie-apps/map-reduce/job.properties -run,成功結果如圖:
例4:使用Coordinator周期性調度任務
** 配置時區
如圖:+0800是東八區區時,如果不是此時區,查詢如何修改時區,在此不贅述。
** 修改oozie-site.xml文件
添加如下屬性,該屬性可以去oozie-default.xml文件中查找
** 修改oozie-console.js文件中的時區設定
$ cat /opt/modules/cdh/oozie-4.0.0-cdh5.3.6/oozie-server/webapps/oozie/oozie-console.js,搜索TimeZone函數,修改為如下:
** 重啟oozie,並清除瀏覽器緩存,不放心的話,可以換另一個瀏覽器打開即可
$ bin/oozied.sh stop
$ bin/oozied.sh start
** 拷貝coordinator周期任務模板
首先,還是先去examples裏面拷貝個任務配置模板出來
$ cp -r examples/apps/cron/ oozie-apps/
** 修改job.properties、coordinator.xml文件,workflow文件就用案例1的即可。
由於我打算讓coordinator來調度案例1的workflow任務,所以,先把案例1的workflow.xml復制到cron目錄下。
$ cp oozie-apps/shell/workflow.xml oozie-apps/cron/
當然了,還有那個具體的腳本p1.sh和p2.sh
$ cp oozie-apps/shell/p1.sh oozie-apps/shell/p2.sh oozie-apps/cron/
然後修改job.properties文件:
然後修改coordinator.xml文件:
修改內容:frequency修改為5分鐘執行一次,時區修改為GMT+0800,註意,coordinator執行頻率最小為5分鐘一次。
** 運行測試
先上傳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
請自行觀察其5分鐘執行一次,執行到明天結束。
* 總結
oozie調度框架的學習,如果概念不了解,可以先在似懂非懂的狀態下把例子學會,再回顧知識點,自然就理解了。
個人微博:http://weibo.com/seal13
QQ大數據技術交流群(廣告勿入):476966007
作者:Z盡際
鏈接:https://www.jianshu.com/p/6ef2fdb3f8cb
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。
Oozie框架基礎