前言:
最近在實際工作中玩到了Azkaban,雖然之前有簡單的接觸,但是真正用到的時候,才能體會到這個工具的實用性有多強。下面就寫個系列文章來記錄下azkaban從簡介及安裝配置再到簡單使用的一個過程。
1、概述
1.1、為什么需要工作流調度系統
- 一個完整的數據分析系統通常都是由大量任務單元組成:
shell腳本程序,java程序,mapreduce程序、hive腳本等 - 各任務單元之間存在時間先后及前后依賴關系
- 為了很好地組織起這樣的復雜執行計劃,需要一個工作流調度系統來調度執行;
例如,我們可能有這樣一個需求,某個業務系統每天產生20G原始數據,我們每天都要對其進行處理,處理步驟如下所示:
- 通過Hadoop先將原始數據同步到HDFS上;
- 借助MapReduce計算框架對原始數據進行轉換,生成的數據以分區表的形式存儲到多張Hive表中;
- 需要對Hive中多個表的數據進行JOIN處理,得到一個明細數據Hive大表;
- 將明細數據進行復雜的統計分析,得到結果報表信息;
- 需要將統計分析得到的結果數據同步到業務系統中,供業務調用使用。
以上整個流程組成了我們的一個job,如果采用傳統的linux定時任務去處理這個流程的話,存在一個巨大的隱患,job失敗率很高,流程無法控制,沒有預警機制。所以類似的這種工作流調度器的工具就應運而生!
1.2、工作流調度實現方式
簡單的任務調度:直接使用linux的crontab來定義;
復雜的任務調度:開發調度平臺或使用現成的開源調度系統,比如ooize、azkaban等
1.3、常見工作流調度系統及其特性對比
下面的表格對上述四種hadoop工作流調度器的關鍵特性進行了比較,盡管這些工作流調度器能夠解決的需求場景基本一致,但在設計理念,目標用戶,應用場景等方面還是存在顯著的區別,在做技術選型的時候,可以提供參考:
1.4、Azkaban介紹
Azkaban是由Linkedin開源的一個批量工作流任務調度器。用于在一個工作流內以一個特定的順序運行一組工作和流程。Azkaban定義了一種KV文件格式來建立任務之間的依賴關系,并提供一個易于使用的web用戶界面維護和跟蹤你的工作流。
它有如下功能特點:
- Web用戶界面
- 方便上傳工作流
- 方便設置任務之間的關系
- 調度工作流 認證/授權(權限的工作)
- 能夠殺死并重新啟動工作流
- 模塊化和可插拔的插件機制
- 項目工作區
- 工作流和任務的日志記錄和審計
2、Azkaban安裝部署
2.1、準備工作
Azkaban Web服務器
azkaban-web-server-2.5.0.tar.gz
Azkaban執行服務器
azkaban-executor-server-2.5.0.tar.gz
MySQL
目前azkaban只支持 mysql,需安裝mysql服務器,本文檔中默認已安裝好mysql服務器,并建立了 root用戶,密碼 root.
下載地址:http://azkaban.github.io/downloads.html
2.2、azkaban web服務器安裝
將安裝文件上傳到集群,最好上傳到安裝 hive、sqoop的機器上,方便命令的執行
在當前用戶目錄下新建 azkabantools目錄,用于存放源安裝文件.新建azkaban目錄,用于存放azkaban運行程序
解壓azkaban-web-server-2.5.0.tar.gz 命令: tar –zxvf azkaban-web-server-2.5.0.tar.gz 將解壓后的azkaban-web-server-2.5.0 移動到 azkaban目錄中,并重新命名 webserver 命令: mv azkaban-web-server-2.5.0 ../azkabancd ../azkabanmv azkaban-web-server-2.5.0 server
2.3、azkaban 執行服器安裝
解壓azkaban-executor-server-2.5.0.tar.gz 命令:tar –zxvf
azkaban-executor-server-2.5.0.tar.gz
將解壓后的azkaban-executor-server-2.5.0 移動到 azkaban目錄中,并重新命名 executor 命令:mv
azkaban-executor-server-2.5.0 …/azkaban cd …/azkaban mv
azkaban-executor-server-2.5.0 executorazkaban腳本導入 解壓: azkaban-sql-script-2.5.0.tar.gz 命令:tar –zxvf
azkaban-sql-script-2.5.0.tar.gz 將解壓后的mysql 腳本,導入到mysql中: 進入mysql
mysql> create database azkaban; mysql> use azkaban; Database changed
mysql> source /home/hadoop/azkaban-2.5.0/create-all-sql-2.5.0.sql;
2.4、創建SSL配置
參考地址: http://docs.codehaus.org/display/JETTY/How+to+configure+SSL
命令: keytool -keystore keystore -alias jetty -genkey -keyalg RSA
運行此命令后,會提示輸入當前生成 keystor的密碼及相應信息,輸入的密碼請勞記,信息如下:
輸入keystore密碼:
再次輸入新密碼:
您的名字與姓氏是什么?[Unknown]:
您的組織單位名稱是什么?[Unknown]:
您的組織名稱是什么?[Unknown]:
您所在的城市或區域名稱是什么?[Unknown]:
您所在的州或省份名稱是什么?[Unknown]:
該單位的兩字母國家代碼是什么[Unknown]: CN
CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN 正確嗎?[否]: y
輸入的主密碼
(如果和 keystore 密碼相同,按回車):
再次輸入新密碼:
完成上述工作后,將在當前目錄生成 keystore 證書文件,將keystore 考貝到 azkaban web服務器根目錄中.如:cp keystore azkaban/server
2.5、配置文件
注:先配置好服務器節點上的時區
1、先生成時區配置文件Asia/Shanghai,用交互式命令 tzselect 即可
2、拷貝該時區文件,覆蓋系統本地時區配置
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
azkaban web服務器配置
進入azkaban web服務器安裝目錄 conf目錄
- 修改azkaban.properties文件
命令vi azkaban.properties
內容說明如下:
#Azkaban Personalization Settings
azkaban.name=Test #服務器UI名稱,用于服務器上方顯示的名字
azkaban.label=My Local Azkaban #描述
azkaban.color=#FF3601 #UI顏色
azkaban.default.servlet.path=/index #
web.resource.dir=web/ #默認根web目錄
default.timezone.id=Asia/Shanghai #默認時區,已改為亞洲/上海 默認為美國#Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager #用戶權限管理默認類
user.manager.xml.file=conf/azkaban-users.xml #用戶配置,具體配置參加下文#Loader for projects
executor.global.properties=conf/global.properties # global配置文件所在位置
azkaban.project.dir=projects #database.type=mysql #數據庫類型
mysql.port=3306 #端口號
mysql.host=localhost #數據庫連接IP
mysql.database=azkaban #數據庫實例名
mysql.user=root #數據庫用戶名
mysql.password=root #數據庫密碼
mysql.numconnections=100 #最大連接數# Velocity dev mode
velocity.dev.mode=false
# Jetty服務器屬性.
jetty.maxThreads=25 #最大線程數
jetty.ssl.port=8443 #Jetty SSL端口
jetty.port=8081 #Jetty端口
jetty.keystore=keystore #SSL文件名
jetty.password=123456 #SSL文件密碼
jetty.keypassword=123456 #Jetty主密碼 與 keystore文件相同
jetty.truststore=keystore #SSL文件名
jetty.trustpassword=123456 # SSL文件密碼# 執行服務器屬性
executor.port=12321 #執行服務器端口# 郵件設置
mail.sender=xxxxxxxx@163.com #發送郵箱
mail.host=smtp.163.com #發送郵箱smtp地址
mail.user=xxxxxxxx #發送郵件時顯示的名稱
mail.password=********** #郵箱密碼
job.failure.email=xxxxxxxx@163.com #任務失敗時發送郵件的地址
job.success.email=xxxxxxxx@163.com #任務成功時發送郵件的地址
lockdown.create.projects=false #
cache.directory=cache #緩存目錄
- azkaban 執行服務器executor配置
進入執行服務器安裝目錄conf,修改azkaban.properties
vi azkaban.properties
#Azkaban
default.timezone.id=Asia/Shanghai #時區# Azkaban JobTypes 插件配置
azkaban.jobtype.plugin.dir=plugins/jobtypes #jobtype 插件所在位置#Loader for projects
executor.global.properties=conf/global.properties
azkaban.project.dir=projects#數據庫設置
database.type=mysql #數據庫類型(目前只支持mysql)
mysql.port=3306 #數據庫端口號
mysql.host=192.168.20.200 #數據庫IP地址
mysql.database=azkaban #數據庫實例名
mysql.user=root #數據庫用戶名
mysql.password=root #數據庫密碼
mysql.numconnections=100 #最大連接數# 執行服務器配置
executor.maxThreads=50 #最大線程數
executor.port=12321 #端口號(如修改,請與web服務中一致)
executor.flow.threads=30 #線程數
- 用戶配置
進入azkaban web服務器conf目錄,修改azkaban-users.xml
vi azkaban-users.xml 增加 管理員用戶
<azkaban-users><user username="azkaban" password="azkaban" roles="admin" groups="azkaban" /><user username="metrics" password="metrics" roles="metrics"/><user username="admin" password="admin" roles="admin,metrics" /><role name="admin" permissions="ADMIN" /><role name="metrics" permissions="METRICS"/>
</azkaban-users>
2.6、啟動
- web服務器
在azkaban web服務器目錄下執行啟動命令
bin/azkaban-web-start.sh
注:在web服務器根目錄運行
或者啟動到后臺
nohup bin/azkaban-web-start.sh 1>/tmp/azstd.out 2>/tmp/azerr.out &
- 執行服務器
在執行服務器目錄下執行啟動命令
bin/azkaban-executor-start.sh
注:只能要執行服務器根目錄運行
啟動完成后,在瀏覽器(建議使用谷歌瀏覽器)中輸入https://服務器IP地址:8443 ,即可訪問azkaban服務了.在登錄中輸入剛才新的戶用名及密碼,點擊 login.