大資料排程框架Oozie概述以及安裝部署
一、初步認識Oozie
常用的排程框架:
- Linux Crontab
- Azkaban(簡單易用,但是功能不夠全)
- Oozie
- Zeus(阿里開源框架)
Oozie是一個分散式大資料排程框架,在oozie中,有兩個重要的概念,工作流和排程。所謂工作流,就是將一系列作業按照一定的流程進行程式設計,按照自己的意願去工作;對於排程,如果大家熟悉java,應該會知道quartz,是java後端排程框架,oozie與此類似,也是一個排程框架,它能夠依據時間與資料對job進行排程。
因為對於Oozie來說,它有以下特點:
- 一個基於工作流引擎的開源框架,是由Cloudera公司貢獻給Apache。它能夠提供對Hadoop MapReduce和Pig Jobs的任務排程和協調。Oozie需要部署到Java Servlet容器中執行。
- Oozie工作流提供很多功能的節點,比如分支、併發、匯合等等。
- Oozie一般定義了控制流節點(Control Flow Nodes)和動作節點(Actions Nodes),其中控制流節點定義了流程的開始和結束。以及控制流程的執行路徑(Execution Path),如decision,fork,join等;而動作節點包括MapReduce-Job,hadoop檔案系統,Pig等Oozie子流程。
- Oozie是一個可擴充套件的、靈活的、分散式系統。
Oozie發展至今已經到5.X版本,在前面的幾個版本中,Oozie經歷瞭如下發展:
- Oozie v1是一個基於工作流引擎的排程框架(base WorkFlow Engine),你可以指定工作流job來執行hadoop mapreduce任務或者pig任務。
- Oozie v2是一個基於協調排程的框架(base Coordinator Engine),你可以指定工作流基於時間和資料來進行排程,可以基於一個時間點來排程工作流,也可以基於資料(hdfs)來排程工作流。
- Oozie v3是一個基於繫結引擎的框架(base Bundle Engine),它提供了更高層次的API來bundle一系列coordinator application,使用者可以使用start/stop/resume/suspend/return 來更好的操作和控制一系列coordinator application。
由以上發展的版本來看,Oozie中最最重要的三大元件是:WorkFlow,Coordinator,Bundle。另外,如果想要用Oozie的前端監控平臺,需要在servlet容器中執行,因為前端監控介面使用ext.js開發。當然,也需要使用資料庫來儲存排程工作流的資訊,預設的是使用derby記憶體資料庫,一般情況下我們可以配置自己的mysql資料庫來儲存工作流資訊。
為了更好的理解WorkFlow和Coordinator,下面兩幅圖分別是WorkFlow和Coordinator的示意圖:
WorkFlow:
Coordinator:
Oozie的架構圖如下圖所示:
Oozie安裝、啟動:
首先需要下載oozie,Apache版本的oozie需要自己編譯,不過這裡不進行編譯,使用CDH版本 的Oozie。讀者可自行去CDH官方網站下載。
這裡使用Oozie4.0.0版本,安裝環境要求如下:
- Unix box (tested on Mac OS X and Linux)
- Java JDK 1.6+
- Maven 3.0.1+
- Hadoop 0.20.2+
- Pig 0.7+
除了需要下載Oozie壓縮包外,讀者還需要有hadoop環境,此外,需要下載ext.js的壓縮包。這裡使用hadoop2.5.0版本,使用者可以下載適當版本的oozie和hadoop版本 安裝即可
解壓好Oozie安裝包之後,首先在hadoop配置檔案中為Oozie程序配置代理使用者,在core-site.xml檔案中配置如下:
<property>
<name>hadoop.proxyuser.[OOZIE_SERVER_USER].hosts</name>
<value>[OOZIE_SERVER_HOSTNAME]</value>
</property>
<property>
<name>hadoop.proxyuser.[OOZIE_SERVER_USER].groups</name>
<value>[USER_GROUPS_THAT_ALLOW_IMPERSONATION]</value>
</property>
OOZIE_SERVER_USER是你的伺服器使用者名稱,OOZIE_SERVER_HOSTNAME是主機名,USER_GROUPS_THAT_ALLOW_IMPERSONATION一般填*,表示所有組。
解壓好的oozie安裝包裡的目錄如下圖所示(這裡是我們配置好的截圖,具體可以看目錄作用可以看官網介紹)。
這裡需要將hadoop-lib檔案解壓,即上圖中的oozie-hadooplibs-4.0.0-cdh5.3.6.tar.gz壓縮包解壓,解壓之後目錄如上圖所示,為oozie-4.0.0-cdh5.3.6,在該目錄下,有一個hadooplibs目錄,這個目錄下有兩個檔案:
hadooplib-2.5.0-cdh5.3.6.oozie-4.0.0-cdh5.3.6
hadooplib-2.5.0-mr1-cdh5.3.6.oozie-4.0.0-cdh5.3.6
這兩個檔案是oozie為hadoop提供的支援類庫,第一個是hadoop2的類庫,第二個是hadoop1的類庫,在後面配置時當然要選擇hadoop2了。
接著,建立一個libext資料夾,將上面所說的hadoop2的類庫以及ext的壓縮包拷貝到這個目錄下。
然後使用下面命令生成一個war包,它會將oozie部署到內嵌的tomcat容器中:
bin/oozie-setup.sh prepare-war
接著,安裝sharelib,需要制定hdfs檔案系統地址,然後還需要制定sharelib安裝包的地址,如果不指定,它會在oozie安裝目錄下搜尋,但是在oozie安裝目錄下有兩個sharelib壓縮包,記住,必須選擇支援yarn的壓縮包,命令如下所示:
bin/oozie-setup.sh sharelib create -fs hdfs://hadoop-senior.shinelon.com:8020 -locallib oozie-sharelib-4.0.0-cdh5.3.6-yarn.tar.gz
使用oozie安裝目錄下自帶的sql檔案建立資料庫:
bin/ooziedb.sh create -sqlfile oozie.sql -run DB Connection
最後,還需要在oozie-site.xml配置檔案中指定hadoop配置檔案的目錄:
<property>
<name>oozie.service.HadoopAccessorService.hadoop.configurations</name>
<value>*=/opt/cdh-5.3.6/hadoop-2.5.0-cdh5.3.6/etc/hadoop</value>
</property>
至此,我們完成了oozie的所有配置,可以使用如下命令執行oozie(注意,啟動之前必須先啟動hadoop):
bin/oozied.sh start
啟動之後,可以在瀏覽器中通過11000埠訪問oozie前端控制檯,如下圖所示: