1.概述
在開發Hadoop的相關應用使用,在業務不復雜,任務不多的情況下,我們可以直接使用Crontab去完成相關應用的排程。今天給大家介紹的是統一管理各種排程任務的系統,下面為今天分享的內容目錄:
- 內容介紹
- Oozie Server
- 截圖預覽
下面開始今天的內容分享。
2.內容介紹
今天的內容不涉及Oozie的具體細節操作,它的工作流程在下一篇部落格為大家詳細介紹。今天主要給大家分享Oozie的作用,它的整合步驟等內容。
2.1 作用
Oozie它是一個開源的工作流排程系統,它可以管理邏輯複雜的多個Hadoop作業任務,按照指定的順序將其進行協同工作。比如說,我們日常的工作場景:
- 收集資料到HDFS
- 編寫MR去清洗資料,生成新的資料存放到指定的HDFS路徑下
- 建立Hive表分割槽,並載入資料到對應的表分割槽
- 使用HQL進行業務指標統計,並將統計的結果輸出到對應的Hive大表當中
- 對統計後的大表當中的資料進行資料匯出共外界業務去呼叫使用
通過上述的日常工作流程,我們可以編寫工作流系統,生成一個工作流例項,然後每天定時去執行例項即可。針對這樣一種Hadoop的應用場景,Oozie能夠簡化我們的任務排程並執行。
2.2 基礎環境
本次給大家分享的基礎環境是:
Name | Value |
作業系統 | CentOS6.6 |
工作流 | Oozie4.2 |
Hadoop | 2.6 |
以上便是本篇部落格需依賴的基礎環境。另外還需要用到JDK,Maven,MySQL驅動檔案等。
3.Oozie Server
Oozie Server能夠為我們提供便捷的Job管理功能,可以通過其視覺化介面去管理Job的執行狀態,當然也支援構建複雜的Hadoop Job流程,各個Job之間的依賴關係可以通過工作流進行配置,由Oozie Server統一去執行。
3.1 依賴包準備
- Maven
下載安裝Maven環境,命令如下所示:
wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.3.3/binaries/apache-maven-3.3.3-bin.tar.gz tar -zxvf apache-maven-3.3.3-bin.tar.gz
接著新增環境變數,如下所示:
export M2_HOME=/home/hadoop/maven-3.3.3 export PATH=$PATH:$ES_HOME/bin
然後輸入一下命令使之立即生效:
. /etc/profile
最後,我們輸入 mvn -version 命令,若能現實對應的Maven版本號,即表示Maven環境整合OK。
- MySQL
關於 MySQL 資料庫的安裝配置較為簡單,這裡就不多做贅述了。
- Tomcat
由於Oozie會用其Web容器,這裡需要安裝Tomcat Web伺服器,可以到Apache的官網下載對應的安裝包,這裡不多做贅述。
- ExtJS工具包
在視覺化會依賴該工具包,所以這裡我們需要下載其工具,下載地址我們可以在Oozie的DG_QuickStart頁面找到,如下圖所示:
地址如下所示:
wget http://dev.sencha.com/deploy/ext-2.2.zip
- Oozie
這裡我們可以在Oozie的官網下載其安裝包,下載地址:
wget http://mirrors.cnnic.cn/apache/oozie/4.2.0/oozie-4.2.0.tar.gz
3.2 Oozie整合
在準備好環境後,接下來,我們去整合Oozie。首先,我們將下載的Oozie安裝包進行解壓,然後,使用Maven命令對其進行打包。操作命令如下所示:
# 解壓 tar -zxvf oozie-4.2.0.tar.gz # 進入 cd oozie-4.2.0 # 打包 mvn clean package assembly:single -DskipTests
注意:這裡需要對pom檔案進行修改,將JDK、Hadoop、HBase、Hive等元件的版本號進行統一,與你使用的版本號一致即可。
成功後出現以下圖所示:
生成的路徑地址如下所示:
/home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0
此時,我們修改Oozie的環境變數,如下所示:
export OOZIE_HOME=/home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0 export PATH=$PATH:$OOZIE_HOME/bin
接著,我們在$OOZIE_HOME目錄下建立一個資料夾用於存放ExtJS和Hadoop的JAR檔案,這裡我們將前面下載的ExtJS的壓縮包和Hadoop的Share目錄下的JAR檔案拷貝到libext資料夾下即可。由於,我們使用了MySQL來儲存Oozie的後設資料,所以需要用到MySQL的驅動包,因而,我們需要將MySQL的驅動包拷貝到libext目錄下。
在準備完這些後,下面我們開始安裝,命令如下所示:
# 進入$OOZIE_HOME/bin目錄 ./oozie-setup.sh prepare-war
生成以下資訊,表示成功,內容如下所示:
[hadoop@nna bin]$ ./oozie-setup.sh prepare-war setting CATALINA_OPTS="$CATALINA_OPTS -Xmx1024m" INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/commons-configuration-1.6.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-auth-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-common-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-common-2.6.0-tests.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-hdfs-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-hdfs-2.6.0-tests.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-hdfs-nfs-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-mapreduce-client-app-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-mapreduce-client-common-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-mapreduce-client-core-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-mapreduce-client-hs-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-mapreduce-client-hs-plugins-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-mapreduce-client-jobclient-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-mapreduce-client-jobclient-2.6.0-tests.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-mapreduce-client-shuffle-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-mapreduce-examples-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-nfs-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-yarn-api-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-yarn-applications-distributedshell-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-yarn-applications-unmanaged-am-launcher-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-yarn-client-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-yarn-common-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-yarn-registry-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-yarn-server-applicationhistoryservice-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-yarn-server-common-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-yarn-server-nodemanager-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-yarn-server-resourcemanager-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-yarn-server-tests-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-yarn-server-web-proxy-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/mysql-connector-java-5.1.32-bin.jar New Oozie WAR file with added 'ExtJS library, JARs' at /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/oozie-server/webapps/oozie.war INFO: Oozie is ready to be started
若失敗,可根據提示做對應的處理。
這樣,我們在/home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/oozie-server/webapps目錄下就生成了oozie.war檔案。
3.3 配置Oozie
我們在$OOZIE_HOME/conf目錄下修改oozie-site.xml檔案,內容如下所示:
<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://nna: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.</description>
</property>
這裡我們使用手動去建立資料庫,oozie.service.JPAService.create.db.schema若為true屬性,即表示去自動建立。手動建立指令碼如下所示:
CREATE DATABASE oozie; GRANT ALL ON oozie.* TO 'root'@'nna' IDENTIFIED BY 'root'; FLUSH PRIVILEGES;
然後,我們使用以下命令,生成資料表:
#在$OOZIE_HOME/bin目錄下操作 ./ooziedb.sh create -sqlfile oozie.sql -run
生成以下內容:
[hadoop@nna bin]$ ./ooziedb.sh create -sqlfile oozie.sql -run setting CATALINA_OPTS="$CATALINA_OPTS -Xmx1024m" Validate DB Connection DONE DB schema does not exist Check OOZIE_SYS table does not exist DONE Create SQL schema DONE Create OOZIE_SYS table DONE Oozie DB has been created for Oozie version '4.2.0' The SQL commands have been written to: oozie.sql
若執行正常,會生成oozie.sql的指令碼,如下圖所示:
3.4 啟動
接下來,我們去啟動Oozie,命令如下所示:
# 在$OOZIE_HOME/bin目錄下 ./oozie-start.sh
正常啟動內容如下所示:
[hadoop@nna bin]$ ./oozie-start.sh WARN: Use of this script is deprecated; use 'oozied.sh start' instead Setting OOZIE_HOME: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0 Setting OOZIE_CONFIG: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/conf Sourcing: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/conf/oozie-env.sh setting CATALINA_OPTS="$CATALINA_OPTS -Xmx1024m" Setting OOZIE_CONFIG_FILE: oozie-site.xml Setting OOZIE_DATA: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/data Setting OOZIE_LOG: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/logs Setting OOZIE_LOG4J_FILE: oozie-log4j.properties Setting OOZIE_LOG4J_RELOAD: 10 Setting OOZIE_HTTP_HOSTNAME: nna Setting OOZIE_HTTP_PORT: 11000 Setting OOZIE_ADMIN_PORT: 11001 Setting OOZIE_HTTPS_PORT: 11443 Setting OOZIE_BASE_URL: http://nna:11000/oozie Setting CATALINA_BASE: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/oozie-server Setting OOZIE_HTTPS_KEYSTORE_FILE: /home/hadoop/.keystore Setting OOZIE_HTTPS_KEYSTORE_PASS: password Setting OOZIE_INSTANCE_ID: nna Setting CATALINA_OUT: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/logs/catalina.out Setting CATALINA_PID: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/oozie-server/temp/oozie.pid Using CATALINA_OPTS: -Xmx1024m -Dderby.stream.error.file=/home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/logs/derby.log Adding to CATALINA_OPTS: -Doozie.home.dir=/home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0 -Doozie.config.dir=/home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/conf -Doozie.log.dir=/home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/logs -Doozie.data.dir=/home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/data -Doozie.instance.id=nna -Doozie.config.file=oozie-site.xml -Doozie.log4j.file=oozie-log4j.properties -Doozie.log4j.reload=10 -Doozie.http.hostname=nna -Doozie.admin.port=11001 -Doozie.http.port=11000 -Doozie.https.port=11443 -Doozie.base.url=http://nna:11000/oozie -Doozie.https.keystore.file=/home/hadoop/.keystore -Doozie.https.keystore.pass=password -Djava.library.path= Setting up oozie DB setting CATALINA_OPTS="$CATALINA_OPTS -Xmx1024m" Validate DB Connection DONE DB schema exists The SQL commands have been written to: /tmp/ooziedb-9100396876446618885.sql Using CATALINA_BASE: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/oozie-server Using CATALINA_HOME: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/oozie-server Using CATALINA_TMPDIR: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/oozie-server/temp Using JRE_HOME: /usr/java/jdk1.7 Using CLASSPATH: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/oozie-server/bin/bootstrap.jar Using CATALINA_PID: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/oozie-server/temp/oozie.pid
4.截圖預覽
然後,我們可以輸入瀏覽地址,檢視是否啟動正常,如下圖所示:
5.總結
關於Oozie的整合,會有點繁瑣,本篇部落格只是針對單獨的Oozie去整合,後續部落格會給大家介紹Oozie整合到Hadoop叢集,以及相關工作流的用法介紹等。
6.結束語
這篇部落格就和大家分享到這裡,如果大家在研究學習的過程當中有什麼問題,可以加群進行討論或傳送郵件給我,我會盡我所能為您解答,與君共勉!