Hadoop - Azkaban 作業調度


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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM