Hadoop - Azkaban 作業排程

哥不是小蘿莉發表於2016-02-15

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.結束語

  這篇部落格就和大家分享到這裡,如果大家在研究學習的過程當中有什麼問題,可以加群進行討論或傳送郵件給我,我會盡我所能為您解答,與君共勉!

相關文章