1. 程式人生 > >大資料排程框架Oozie概述以及安裝部署

大資料排程框架Oozie概述以及安裝部署

一、初步認識Oozie

常用的排程框架:

  • Linux Crontab
  • Azkaban(簡單易用,但是功能不夠全)
  • Oozie
  • Zeus(阿里開源框架)

Oozie是一個分散式大資料排程框架,在oozie中,有兩個重要的概念,工作流和排程。所謂工作流,就是將一系列作業按照一定的流程進行程式設計,按照自己的意願去工作;對於排程,如果大家熟悉java,應該會知道quartz,是java後端排程框架,oozie與此類似,也是一個排程框架,它能夠依據時間與資料對job進行排程。

因為對於Oozie來說,它有以下特點:

  1. 一個基於工作流引擎的開源框架,是由Cloudera公司貢獻給Apache。它能夠提供對Hadoop MapReduce和Pig Jobs的任務排程和協調。Oozie需要部署到Java Servlet容器中執行。
  2. Oozie工作流提供很多功能的節點,比如分支、併發、匯合等等。
  3. Oozie一般定義了控制流節點(Control Flow Nodes)和動作節點(Actions Nodes),其中控制流節點定義了流程的開始和結束。以及控制流程的執行路徑(Execution Path),如decision,fork,join等;而動作節點包括MapReduce-Job,hadoop檔案系統,Pig等Oozie子流程。
  4. Oozie是一個可擴充套件的、靈活的、分散式系統。

Oozie發展至今已經到5.X版本,在前面的幾個版本中,Oozie經歷瞭如下發展:

  1. Oozie v1是一個基於工作流引擎的排程框架(base WorkFlow Engine),你可以指定工作流job來執行hadoop mapreduce任務或者pig任務。
  2. Oozie v2是一個基於協調排程的框架(base Coordinator Engine),你可以指定工作流基於時間和資料來進行排程,可以基於一個時間點來排程工作流,也可以基於資料(hdfs)來排程工作流。
  3. 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前端控制檯,如下圖所示:
這裡寫圖片描述