1. Oozie概述
一個基於工作流引擎的開源框架,由Cloudera公司貢獻給Apache,提供對Hadoop Mapreduce、Pig Jobs,shell 的任務調度與協調。Oozie需要部署到Java Servlet容器中運行(需要打成war包去運行)。
主要用於定時調度任務,多任務可以按照執行的邏輯順序調度。
類似oozie的框架有azkaban,zeux等
2. Oozie的功能模塊
oozie的功能每個模塊對應的是一個配置文件,配置文件裏面配置相關信息
2.1 Workflow
順序執行流程節點,支持fork(分支多個節點),join(合併多個節點爲一個) 對應配置文件爲Workflow.xml
2.2 Coordinator
定時觸發workflow
2.3 Bundle Job(一般不用)
綁定多個Coordinator
3. oozie節點
oozie節點就是各個配置文件中使用的的節點
3.1 控制流節點(Control Flow Nodes)
控制流節點一般都是定義在工作流開始或者結束的位置,比如start,end,kill等。以及提供工作流的執行路徑機制,如decision,fork,join等。
3.2 動作節點(Action Nodes)
負責執行具體動作的節點,比如:拷貝文件,執行某個Shell腳本等等
4. oozie的部署
這裏配置的是cdh版本的,所以前提是安裝cdh 的hadoop
需要已下資料:
hadoop cdh版本
ext 一個js框架
mysql 的jar包,因爲oozie原數據也是放在mysql 中,需要配置mysql相關
oozie的安裝包
有需要資料的留言
4.1 首先配置hadoop集羣
core-site.xml 這裏因爲oozie需要調度mr任務需要和hadoop 交互,這裏設置訪問用戶用戶組
<!-- Oozie Server的Hostname -->
<property>
<name>hadoop.proxyuser.admin.hosts</name>
<value>*</value>
</property>
<!-- 允許被Oozie代理的用戶組 -->
<property>
<name>hadoop.proxyuser.admin.groups</name>
<value>*</value>
</property>
mapred-site.xml oozie執行mr 這裏需要看執行日誌,需要配置jobHistoryServer 它一般和namenode在同一個節點上
<!-- 配置 MapReduce JobHistory Server 地址 ,默認端口10020 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop-101:10020</value>
</property>
<!-- 配置 MapReduce JobHistory Server web ui 地址, 默認端口19888 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop101:19888</value>
</property>
yarn-site.xml
<!-- 任務歷史服務 一般和nn同意同一個節點 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop-101:19888/jobhistory/logs/</value>
</property>
完成後:記得scp同步到其他機器節點,
測試jobHistoryServer是否可用,執行一個hadoop自帶的jar
/opt/module/cdh/hadoop-2.5.0-cdh5.3.6/bin/yarn jar ./hadoop-mapreduce-examples-2.7.2.jar wordcount /input/ /out/
查看hadoop-102:8088(resourceManager 節點)上看到yarn job 執行流程就成功了
4.2 部署Oozie
- 解壓Oozie
[admin@hadoop102 software]$ tar -zxvf /opt/software/cdh/oozie-4.0.0-cdh5.3.6.tar.gz -C /opt/module/cdh
- 在oozie根目錄下解壓oozie-hadooplibs-4.0.0-cdh5.3.6.tar.gz
[admin@hadoop102 oozie-4.0.0-cdh5.3.6]$ tar -zxvf oozie-hadooplibs-4.0.0-cdh5.3.6.tar.gz -C ../
完成後Oozie目錄下會出現hadooplibs目錄
3) 在Oozie目錄下創建libext目錄,這個目錄放相關依賴
[admin@hadoop102 oozie-4.0.0-cdh5.3.6]$ mkdir libext/
將hadooplibs裏面的jar包,拷貝到libext目錄下:
拷貝Mysql驅動包到libext目錄下:
將ext-2.2.zip拷貝到libext/目錄下:
[admin@hadoop102 oozie-4.0.0-cdh5.3.6]$ cp -ra hadooplibs/hadooplib-2.5.0-cdh5.3.6.oozie-4.0.0-cdh5.3.6/* libext/
[admin@hadoop102 oozie-4.0.0-cdh5.3.6]$ cp -a /opt/software/mysql-connector-java-5.1.27/mysql-connector-java-5.1.27-bin.jar ./libext/
[admin@hadoop102 oozie-4.0.0-cdh5.3.6]$ cp -a /opt/software/cdh/ext-2.2.zip libext/
- 配製Oozie配置文件
vi conf/oozie-site.xml
配製mysql 四要素 & hadoop 的配置文件位置
<property>
<name>oozie.service.JPAService.jdbc.driver</name>
<value>com.mysql.jdbc.Driver</value>
<description>
JDBC driver class.
</description>
</property>
<property>
<name>oozie.service.JPAService.jdbc.url</name>
<value>jdbc:mysql://hadoop-101:3306/oozie</value>
<description>
JDBC URL.
</description>
</property>
<property>
<name>oozie.service.JPAService.jdbc.username</name>
<value>root</value>
<description>
DB user name.
</description>
</property>
<property>
<name>oozie.service.JPAService.jdbc.password</name>
<value>root</value>
<description>
DB user password.
IMPORTANT: if password is emtpy leave a 1 space string, the service trims the value,
if empty Configuration assumes it is NULL.
</description>
</property>
<property>
<name>oozie.service.HadoopAccessorService.hadoop.configurations</name>
<value>*=/opt/module/cdh/hadoop-2.5.0-cdh5.3.6/etc/hadoop</value>
<description>
Comma separated AUTHORITY=HADOOP_CONF_DIR, where AUTHORITY is the HOST:PORT of
the Hadoop service (JobTracker, HDFS). The wildcard '*' configuration is
used when there is no exact match for an authority. The HADOOP_CONF_DIR contains
the relevant Hadoop *-site.xml files. If the path is relative is looked within
the Oozie configuration directory; though the path can be absolute (i.e. to point
to Hadoop client conf/ directories in the local filesystem.
</description>
</property>
總結爲如下:
屬性:oozie.service.JPAService.jdbc.driver
屬性值:com.mysql.jdbc.Driver
解釋:JDBC的驅動
屬性:oozie.service.JPAService.jdbc.url
屬性值:jdbc:mysql://hadoop102:3306/oozie
解釋:oozie所需的數據庫地址
屬性:oozie.service.JPAService.jdbc.username
屬性值:root
解釋:數據庫用戶名
屬性:oozie.service.JPAService.jdbc.password
屬性值:000000
解釋:數據庫密碼
屬性:oozie.service.HadoopAccessorService.hadoop.configurations
屬性值:*=/opt/module/CDH/hadoop-2.5.0-cdh5.3.6/etc/hadoop
解釋:讓Oozie引用Hadoop的配置文件
這裏需要在mysql 創建oozie 數據庫
mysql> create database oozie;
- 初始化Oozie
上傳 oozie-sharelib-4.0.0-cdh5.3.6-yarn.tar.gz到hdfs並解壓
[admin@hadoop-102 oozie-4.0.0-cdh5.3.6]$ bin/oozie-setup.sh sharelib create -fs hdfs://hadoop-101:8020 -locallib oozie-sharelib-4.0.0-cdh5.3.6-yarn.tar.gz
這條目錄自動解壓
去50070檢查對應目錄有沒有文件生成。
6) 創建oozie.sql文件
[admin@hadoop102 oozie-4.0.0-cdh5.3.6]$ bin/ooziedb.sh create -sqlfile oozie.sql -run
打包項目,生成war包(這裏oozie服務確認是不啓動的)
[admin@hadoop102 oozie-4.0.0-cdh5.3.6]$ bin/oozie-setup.sh prepare-war
- 啓動關閉oozie
[admin@hadoop102 oozie-4.0.0-cdh5.3.6]$ bin/oozied.sh start
[admin@hadoop102 oozie-4.0.0-cdh5.3.6]$ bin/oozied.sh stop
- 啓動之後訪問Oozie的Web頁面,端口11000
http://hadoop-101:11000/oozie
如果有出現問題評論直接提問
5. oozie的第一個案例
案例內容:使用Oozie調度Shell腳本
第一步:創建app目錄 oozie-app/shell 以後所有job都放在oozie-app的分目錄下
[root@hadoop-102 oozie-4.0.0-cdh5.3.6]# mkdir oozie-app
第二步:在oozie-app/shell目錄下創建兩個文件——job.properties和workflow.xml文件
[root@hadoop-102 oozie-4.0.0-cdh5.3.6]# touch touch workflow.xml
[root@hadoop-102 oozie-4.0.0-cdh5.3.6]# touch job.properties