Azkaban工作流排程器
一、課前準備
- 安裝好對應版本的mysql
- 安裝好對應版本的hadoop叢集
- 安裝好對應版本的hive
二、課堂主題
本堂課主要圍繞Azkaban的知識點進行講解。主要包括以下幾個方面
- Azkaban的核心概念
- Azkaban的架構原理
- Azkaban的安裝和使用
三、課堂目标
- 掌握Azkaban排程器的使用
四、知識要點
1. 為什麼需要工作流排程系統
- 一個完整的資料分析系統通常都是由大量任務單元組成;
- shell腳本程式、java程式、mapreduce程式、hive腳本等
- 各任務單元之間存在時間先後及前後依賴關系
- 為了很好地組織起這樣的複雜執行計劃,需要一個工作流排程系統來排程執行
2. Azkaban是什麼
- Azkaban是由Linkedin開源的一個批量工作流任務排程器。用于在一個工作流内以一個特定的順序運作一組工作和流程。
- Azkaban定義了一種KV檔案(properties)格式來建立任務之間的依賴關系,并提供一個易于使用的web使用者界面維護和跟蹤你的工作流。
- https://azkaban.github.io/
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL5VlaNpXVU9EeRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL3UTN3UDN0IjMzITOwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
- 功能特點
- 提供功能清晰、簡單易用的web UI界面
- 提供job配置檔案快速建立任務和任務之間的關系
- 提供子產品化的可插拔機制,原生支援command、java、hive、hadoop
- 基于java開發,代碼結構清晰,易于二次開發
3. Azkaban基本架構
- Azkaban由三部分構成
- 1、Azkaban Web Server
- 提供了Web UI,是azkaban的主要管理者,包括 project 的管理,認證,排程,對工作流執行過程的監控等。
- 1、Azkaban Web Server
- 2、Azkaban Executor Server
- 負責具體的工作流和任務的排程送出
- 3、Mysql
- 用于儲存項目、日志或者執行計劃之類的資訊
4. Azkaban架構的三種運作模式
- 1、solo server mode(單機模式)
H2
web server 和 executor server運作在一個程序裡
最簡單的模式,資料庫内置的H2資料庫,管理伺服器和執行伺服器都在一個程序中運作,任務量不大項目可以采用此模式。
- 2、two server mode
MySQL(主從結構)
web server 和 executor server運作在不同的程序
資料庫為mysql,管理伺服器和執行伺服器在不同程序,這種模式下,管理伺服器和執行伺服器互不影響。
- 3、multiple executor mode
MySQL(主從結構)
web server 和 executor server運作在不同的程序,executor server有多個
該模式下,執行伺服器和管理伺服器在不同主機上,且執行伺服器可以有多個。
5. Azkaban安裝部署
- 采用第二種模式,管理伺服器、執行伺服器分程序,但在同一台主機上。
- 1、下載下傳安裝包
- azkaban-web-server-2.5.0.tar.gz
- azkaban-executor-server-2.5.0.tar.gz
- azkaban-sql-script-2.5.0.tar.gz
- 2、規劃安裝目錄
- /opt/bigdata
- 3、上傳安裝包到伺服器
- 4、azkaban web伺服器安裝
- 4.1 先建立一個目錄
mkdir /opt/bigdata/azkaban
- 4.2 解壓azkaban-web-server-2.5.0.tar.gz
tar –zxvf azkaban-web-server-2.5.0.tar.gz -C /opt/bigdata/azkaban
- 4.3 重命名解壓目錄
mv /opt/bigdata/azkaban/azkaban-web-2.5.0 /opt/bigdata/azkaban/server
- 4.4 配置SSL安全通路協定
指令: keytool -keystore keystore -alias jetty -genkey -keyalg RSA 運作此指令後,會提示輸入目前生成 keystore的密碼及相應資訊,輸入的密碼請勞記,資訊如下: (hadoop) 輸入keystore密碼: 再次輸入新密碼: 您的名字與姓氏是什麼? [Unknown]: hadoop 您的組織機關名稱是什麼? [Unknown]: hadoop 您的組織名稱是什麼? [Unknown]: hadoop 您所在的城市或區域名稱是什麼? [Unknown]: hadooo 您所在的州或省份名稱是什麼? [Unknown]: 該機關的兩字母國家代碼是什麼 [Unknown]: CN CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN 正确嗎? [否]: y 輸入<jetty>的主密碼 (如果和 keystore 密碼相同,按回車): hadoop 再次輸入新密碼: 完成上述工作後,将在目前目錄生成 keystore 證書檔案,将keystore 考貝到 azkaban webserver 伺服器根目錄中. 執行拷貝指令: cp keystore /opt/bigdata/azkaban/server/
- 4.5 配置時區
1、先生成時區配置檔案Asia/Shanghai,用互動式指令 tzselect 即可 選5 --->選9---->選1----->選1 2、拷貝該時區檔案,覆寫系統本地時區配置 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
- 4.6 修改配置檔案
- vim /opt/bigdata/azkaban/server/conf/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=node1 #資料庫連接配接IP
mysql.database=azkaban #資料庫執行個體名
mysql.user=root #資料庫使用者名
mysql.password=123456 #資料庫密碼
# 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 #執行伺服器端口
# 郵件設定
[email protected] #發送郵箱
mail.host=smtp.163.com #發送郵箱smtp位址
mail.user=xxxxxxxx #發送郵件時顯示的名稱
mail.password=********** #郵箱密碼
[email protected] #任務失敗時發送郵件的位址
[email protected] #任務成功時發送郵件的位址
lockdown.create.projects=false
cache.directory=cache #緩存目錄
#郵箱用于後期跑任務如果失敗了可以用來通知使用者
- 4.7 修改配置檔案使用者配置
- vim /opt/bigdata/azkaban/server/conf/azkaban-users.xml
- 添加管理者使用者
- vim /opt/bigdata/azkaban/server/conf/azkaban-users.xml
<azkaban-users>
<user username="azkaban" password="azkaban" roles="admin"groups="azkaban"/>
<user username="metrics" password="metrics" roles="metrics"/>
<!--新增admin使用者-->
<user username="admin" password="admin" roles="admin,metrics" />
<role name="admin" permissions="ADMIN" />
<role name="metrics" permissions="METRICS"/>
</azkaban-users>
- 5、azkaban 執行服器安裝
- 1、解壓azkaban-executor-server-2.5.0.tar.gz
tar -zxvf azkaban-executor-server-2.5.0.tar.gz -C /opt/bigdata/azkaban
- 2、重命名解壓目錄
mv /opt/bigdata/azkaban/azkaban-executor-2.5.0 /opt/bigdata/azkaban/executor
- 3、修改配置檔案
- vim /opt/bigdata/azkaban/executor/conf/azkaban.properties
#Azkaban #時區 default.timezone.id=Asia/Shanghai #資料庫設定----->需要修改的資訊 mysql.host=node4 #資料庫IP位址 mysql.database=azkaban #資料庫執行個體名 mysql.user=root #資料庫使用者名 mysql.password=!Qaz123456 #資料庫密碼
- 6、azkaban腳本導入
- 解壓azkaban-sql-script-2.5.0.tar.gz
tar -zxvf azkaban-sql-script-2.5.0.tar.gz -C /opt/bigdata/azkaban
- 把解壓後的腳本導入到mysql中
--進入到mysql mysql> create database azkaban; mysql> use azkaban; mysql> source /opt/bigdata/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql; 建立azkaban資料庫用于儲存我們的工作資訊
6. Azkaban啟動
6.1 啟動web server服務
- 在azkaban web server伺服器目錄下執行啟動指令
bin/azkaban-web-start.sh
- ps:在web server伺服器根目錄運作
6.2 啟動executor執行服務
- 在azkaban executor伺服器目錄下執行啟動指令
bin/azkaban-executor-start.sh
- ps:在executor伺服器根目錄運作
- 啟動完成後,在浏覽器(建議使用谷歌浏覽器)中輸入https://伺服器IP位址:8443 ,即可通路azkaban服務了.在登入中輸入剛才新的戶用名及密碼,點選 login.
- 輸入“IP位址:8443”無法通路 web 頁面, 且背景報錯,原因是浏覽器安全證書限制
- 解決辦法:使用“https://ip:8443”通路, 發現已經可以通路了, 背景會報證數問題的錯誤, 忽略即可, 不影響使用, 選擇進階 ------> 繼續通路該網站
- 輸入“IP位址:8443”無法通路 web 頁面, 且背景報錯,原因是浏覽器安全證書限制
(1)、projects:azkaban最重要的一部分,建立一個工程,将所有的工作流放在工程中執行
(2)、scheduling:定時排程任務用的
(3)、executing: 顯示目前運作的任務
(4)、History : 顯示曆史運作任務
一個project由3個按鈕:
(1)、Flows:一個工作流,由多個job組成
(2)、Permissions:權限管理
(3)、Project Logs:工程日志資訊
7. Azkaban實戰
7.1 command類型單一job
- 1、建立job描述檔案 以.job字尾結尾
- 建立 command.job 檔案
#command.job
type=command
command=echo 'hello azkaban......'
- 2、将job資源檔案打包成zip檔案
- 例如
- command.zip
- 例如
- 3、通過azkaban的web管理平台建立project并上傳job壓縮包
- 3、點選運作
- 4、運作完成
7.2 command類型多job工作流
- 1、建立有依賴關系的多個job描述
- 第一個job:start1.job
#start1.job type=command command= echo 'start1...start1...'
- 第二個job:start2.job 它依賴start1.job
#start2.job type=command dependencies=start1 command= echo 'start2...start2...'
- 2、将job資源檔案打包成zip檔案
- start12.zip
- 3、建立工程,上傳zip包,最後啟動工作流
azkaban工作流排程器Azkaban工作流排程器 - 補充
- 如果一個job有多個依賴的job,可以使用逗号隔開
例如:
#start1.job
type=command
command= echo "start1 job"
#start2.job
type=command
command= echo "start2 job"
#stop.job
type=command
denpendencies=start1,start2
command=echo "stop job"
注意:有多個依賴的job,用逗号隔開
7.3 HDFS操作任務
- 1、建立job描述檔案
- vim fs.job
#fs.job type=command command=echo "start execute" command.1=/opt/bigdata/hadoop/bin/hdfs dfs -mkdir /azkaban command.2=/opt/bigdata/hadoop/bin/hdfs dfs -put /home/hadoop/source.txt /azkaban
- 2、将job資源檔案打包成zip檔案
- fs.zip
- 3、建立工程,上傳zip包,最後啟動工作流
7.4 MAPREDUCE任務
- MR任務依然可以使用command的job類型來執行
- 1、建立job描述檔案,及mr程式jar包
- 示例中直接使用hadoop自帶的example jar
#mr.job type=command command=/opt/bigdata/hadoop/bin/hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount /wordcount/in /wordcount/out
- 2、将job資源檔案打包成zip檔案
- mr.zip
- 3、建立工程,上傳zip包,最後啟動工作流
azkaban工作流排程器Azkaban工作流排程器
7.5 HIVE腳本任務
- 1、 建立job描述檔案和hive腳本
- Hive腳本: test.sql
use default; create table if not exists test_azkaban(id int,name string,address string) row format delimited fields terminated by ','; load data local inpath '/home/hadoop/azkaban/test.txt' into table test_azkaban; create table if not exists countaddress as select address,count(*) as num from test_azkaban group by address ; insert overwrite local directory '/home/hadoop/azkaban/out' select * from countaddress;
- 準備資料
- /home/hadoop/azkaban/test.txt
1,zhangsan,shanghai 2,lisi,beijing 3,xiaoming,shanghai 4,xiaozhang,shanghai 5,xiaogang,beijing
- 2、建立job描述檔案
- hive.job
# hive.job type=command command=/opt/bigdata/hive/bin/hive -f 'test.sql'
- 3、将job資源檔案打包成zip檔案
- hive.zip
azkaban工作流排程器Azkaban工作流排程器
- hive.zip
- 4、建立工程,上傳zip包,最後啟動工作流
azkaban工作流排程器Azkaban工作流排程器
五、拓展點、未來計劃、行業趨勢
8. 任務定時排程
- 在啟動工作流的時候,可以點選Schedule,實作定時排程一個工作流