1.概述
在排程 Hadoop 的相關作業時,有以下幾種方式:
- 基於 Linux 系統級別的 Crontab。
- Java 應用級別的 Quartz。
- 第三方的排程系統。
- 自行開發 Hadoop 應用排程系統。
對於前兩種,使用 Crontab 和 Quartz 是基本可以滿足業務需求,但有其弊端。在 Job 數量龐大的情況下,Crontab 指令碼的編寫,變得異常複雜。其排程的過程也不能透明化,讓管理變得困難。Quartz 雖然不用編寫指令碼,實現對應的排程 API 即可,然其排程過程不透明,不涵蓋 Job 執行詳情。需自行開發其功能。
因而,第三方的排程系統便應運而生了。在《Hadoop - 任務排程系統比較》一文中,介紹第三方排程系統之間的差異。這裡筆者就不多贅述了。本篇博文,筆者給大家介紹 Azkaban 的相關使用心得,以及在使用中遇到的種種問題和解決思路。
2.內容
Azkaban 託管在 Github 上,屬於開源產品。它由以下幾部分組成:
- Web Server
- Executor Server
- MySQL
- Plugins(HDFS,JobType,HadoopSecurityManager,JobSummary,PigVisualizer,Reportal)
其各個模組的功能,在《Hadoop - 任務排程系統比較》中有對應的介紹,這裡就不多贅述了。
2.1 How to use
在介紹完其核心模組後,我們如何使用這樣一個排程系統,來排程我們所編寫好的應用。下面,筆者將詳細為大家介紹如何來完成這部分工作。
首先,Azkaban 是一個獨立的系統,不需要依賴 Hadoop 叢集環境。我們可以用單獨的節點來構建這樣一個排程系統。但是根據系統本身的需要,依賴以下環境:
- JDK
- MySQL
在準備完成以上依賴環境後,我們可以構建這樣一個排程系統。在[官網]上下載二進位制安裝包。官網更新的二進位制安裝包比 Github 釋出的較低,若需要使用新版本的 Azkaban ,可在 Github 上下載。
在準備好安裝包後,我們開始去部署相關安裝包。
2.2 How to install
2.2.1 DB Setup
首先,我們要在 MySQL 中新建 Azkaban 的資料庫,操作內容如下所示:
mysql> CREATE DATABASE azkaban;
然後,我們建立所需要的表,內容如下:
mysql>source ${AZKABAN_HOME}/sql/create-all-sql-2.5.0.sql;
SQL 檔案在你安裝包 azkaban-sql-script-2.5.0.tar.gz 中,找到 create-all-sql-2.5.0.sql 執行即可。執行成功後,會在 Azkaban 的資料庫下,生成以下表:
2.2.2 Web Server Setup
接下來是安裝 Web Server,解壓其安裝包,然後在 conf 目錄下配置相關檔案即可:
- azkaban.properties
#Azkaban Personalization Settings azkaban.name=Test azkaban.label=My Local Azkaban azkaban.color=#FF3601 azkaban.default.servlet.path=/index web.resource.dir=/home/hadoop/azkaban/server/web/web/ #default.timezone.id=America/Los_Angeles default.timezone.id=Asia/Shanghai #Azkaban UserManager class user.manager.class=azkaban.user.XmlUserManager user.manager.xml.file=/home/hadoop/azkaban/server/web/conf/azkaban-users.xml #Loader for projects executor.global.properties=conf/global.properties azkaban.project.dir=projects #plugins viewer.plugin.dir=/home/hadoop/azkaban/server/web/plugins/viewer/hdfs #viewer.plugin.dir=hdfs #viewer.plugins=hdfs database.type=mysql mysql.port=3306 mysql.host=nna mysql.database=azkaban mysql.user=root mysql.password=root mysql.numconnections=100 # Velocity dev mode velocity.dev.mode=false # Azkaban Jetty server properties. jetty.maxThreads=25 jetty.ssl.port=8443 jetty.port=8081 jetty.keystore=/home/hadoop/azkaban/server/web/conf/keystore jetty.password=password jetty.keypassword=password jetty.truststore=/home/hadoop/azkaban/server/web/conf/keystore jetty.trustpassword=password # Azkaban Executor settings executor.port=12321 # mail settings mail.user=your_mail_server@example.com mail. password=xxxxx lockdown.create.projects=false cache.directory=cache
另外,Azkaban 需要使用到 KeyStore,在 ${AZKABAN_WEB_SERVER}/conf 下執行如下命令,內容如下所示:
keytool -keystore keystore -alias azkaban -genkey -keyalg RSA
啟動之前先在 ${AZKABAN_WEB_SERVER} 目錄下建立 logs 目錄,進入 ${AZKABAN_WEB_SERVER} 目錄,執行如下命令:
../bin/azkaban-web-start
成功啟動,出現以下截圖資訊:
然後,輸入在瀏覽器中 https://your_host:8443 出現以下介面:
接著輸入使用者名稱和密碼:azkaban/azkaban 便可進入到排程系統中。
2.2.3 Executor Setup
Web Server 只是提供視覺化,要想排程我們所編寫的應用,需要依賴 Executor 服務。在 ${AZKABAN_EXECUTOR}/conf 下配置以下內容:
- azkaban.properties
#Azkaban default.timezone.id=America/Los_Angeles # Azkaban JobTypes Plugins azkaban.jobtype.plugin.dir=plugins/jobtypes #Loader for projects executor.global.properties=conf/global.properties azkaban.project.dir=projects database.type=mysql mysql.port=3306 mysql.host=nna mysql.database=azkaban mysql.user=root mysql.password=root mysql.numconnections=100 # Azkaban Executor settings executor.maxThreads=50 executor.port=12321 executor.flow.threads=30
然後執行以下命令即可:
azkaban-executor-start.sh
3.Flow
下面給大家介紹使用流程,首先,我們在 Web Server 的 Web Console 上建立一個專案,如下圖所示:
然後,點選上傳按鈕,將我們編寫好的應用進行打包上傳。這裡 WordCount 為例子。如下圖所示:
在 WordCount.zip 檔案中,包含兩個檔案,一個是我們編寫需要執行的 JAR 檔案,另一個是對 JAR 檔案進行描述的 Job 檔案,即:WordCount.job,其內容涉及如下:
type=javaprocess java.class=cn.java.Hello
這裡筆者只是做了最小化配置,指明執行型別,和 Java 的 MainClass。
在 Executor Flow 中可以設定,告警通知者,在執行完成,或是失敗的時候通知應用開發者,讓其知曉執行進度,如下所示:
如上圖,我們點選 Schedule 按鈕,可以設定排程的時間。如下圖所示:
在排程模組,現實該專案任務的排程資訊,如下圖所示:
在上圖中,我們還可以設定 SLA 告警模組,在執行 Job 的過程中,若是任務超出限定時間,會將告警資訊通知所這是的人。如下圖所示:
另外,我們可以在 Executing 模組檢視正在執行的 Job,在 History 模組下可以檢視已執行完成的 Job。若是需要使用 Azkaban 來檢視 HDFS 檔案系統的結構目錄,新增對應的外掛即可。這裡就不多贅述了。
4.總結
這裡需要注意的是,由於我們所編寫的應用會上傳到 MySQL 儲存,這裡需要設定 MySQL 的 max_allowed_packet 變數,在 /etc/my.cnf 中進行配置,內容如下所示:
[mysqld] max_allowed_packet=1024M
然後重啟 MySQL 的服務即可。另外,官方釋出的 Azkaban-2.5 版本,路徑設定有問題,解決方式有兩種:第一,按照錯誤提示,配置對應的路徑;第二,修改原始碼中的路徑讀取程式碼,然後重新打包編譯。
5.結束語
這篇部落格就和大家分享到這裡,如果大家在研究學習的過程當中有什麼問題,可以加群進行討論或傳送郵件給我,我會盡我所能為您解答,與君共勉!