文章目錄
- 作業流調度器Azkaban
- Azkaban介紹
- 為什么需要作業流調度系統
- 作業流調度實作方式
- Azkaban簡介
- Azkaban架構
- Azkaban基本架構
- Azkaban架構的三種運行模式
- 1. solo server mode(單機模式)
- 2. two server mode
- 3. multiple executor mode
- Azkaban安裝部署
- 編譯 azkaban
- 1. 下載原始碼包
- 2. 修改build.gradle
- 3. 開始編譯
- 4. 獲得安裝包
- multiple executor模式安裝
- 1. 資料庫準備
- 3. 解壓軟體安裝包
- 4. 安裝SSL安全認證
- 4. 安裝azkaban web server
- 5. 安裝azkaban executor server
- 6. 啟動服務
- 7. 修改linux的時區問題
作業流調度器Azkaban
Azkaban介紹
- azkaban官網:https://azkaban.readthedocs.io/en/latest/

為什么需要作業流調度系統
- 一個完整的資料分析系統通常都是由大量任務單元組成
- shell腳本程式、java程式、mapreduce程式、hive腳本等;
- 各任務單元之間存在時間先后及前后依賴關系;
- 為了很好地組織起這樣的復雜執行計劃,需要一個作業流調度系統來調度執行,
- 例如,我們可能有這樣一個需求,某個業務系統每天產生20G原始資料,我們每天都要對其進行處理,處理步驟如下所示:
- 通過Hadoop先將原始資料同步到HDFS上;
- 借助MapReduce計算框架對原始資料進行轉換,生成的資料以磁區表的形式存盤到多張Hive表中;
- 需要對Hive中多個表的資料進行JOIN處理,得到一個明細資料Hive寬表;
- 將明細資料進行各種統計分析,得到結果報表資訊;
- 需要將統計分析得到的結果資料同步到業務系統中,供業務呼叫使用,
作業流調度實作方式
- 簡單的任務調度:直接使用linux的crontab來定義;
- 復雜的任務調度:開發調度平臺,或使用現成的開源調度系統,比如:ooize、azkaban、airflow、dophinscheduler等
Azkaban簡介
- Azkaban 是由 Linkedin 開源的一個批量作業流任務調度器,用于在一個作業流(work flow)內以一個特定的順序運行一組作業和流程,
- Azkaban 定義了一種 KV 格式檔案(properties)來建立任務之間的依賴關系,并提供一個易于使用的 web 用戶界面維護和跟蹤你的作業流,
- 它有如下功能特點:
- 提供功能清晰、簡單易用的web UI界面
- 方便上傳作業流
- 調度作業流
- 能夠殺死并重新啟動作業流
- 作業流和任務的日志記錄和審計
- 提供job組態檔快速建立任務和任務之間的關系
- 提供模塊化的可插拔機制,原生支持command、java、hive、hadoop
- 安全性高:認證/授權(權限的作業)
- 提供分布式的多個執行服務器executor
- 提供conditional workflow作業流
- 提供功能清晰、簡單易用的web UI界面
Azkaban架構
Azkaban基本架構

Azkaban 由三部分構成:
- Azkaban Web Server:提供了Web UI,是 azkaban 的主要管理者,包括 project 的管理、認證、調度、對作業流執行程序的監控等,
- Azkaban Executor Server:負責具體的作業流和任務的調度提交
- MySQL:用于保存專案、日志或者執行計劃之類的資訊
Azkaban架構的三種運行模式
1. solo server mode(單機模式)
- solo server mode 是 azkaban 的一個獨立的實體
- 易于安裝:不需要安裝mysql,它內置了H2資料庫,作為它的底層持久化存盤
- 易于開始使用:管理服務器 web server 和執行服務器 execute server 都在一個行程中運行,任務量不大專案可以采用此模式
- 包含azkaban所有的功能
- 有興趣的可以參考官網檔案
2. two server mode
- web server 和 executor server運行在不同的行程
- 資料庫為mysql,管理服務器和執行服務器在不同行程
- 這種模式下,管理服務器和執行服務器互不影響
3. multiple executor mode
- web server 和 executor server運行在不同的行程,executor server 有多個
- 該模式下,執行服務器和管理服務器在不同主機上,且執行服務器可以有多個
Azkaban安裝部署
編譯 azkaban
1. 下載原始碼包
- 這里選用azkaban4.0.0這個版本的原始碼進行重新編譯,編譯完成之后得到我們需要的安裝包,然后進行安裝
注意:1、使用
Gradle編譯azkaban原始碼;2、需要使用jdk1.8或更高的版本來進行編譯
- 訪問地址
https://github.com/azkaban/azkaban/releases/tag/4.0.0,下載 azkaban 原始碼包

- 或者使用命令下載
wget https://github.com/azkaban/azkaban/archive/refs/tags/4.0.0.tar.gz
# 解壓縮
tar -zxvf azkaban-4.0.0.tar.gz -C /Volumes/F/MyGitHub/azkaban
2. 修改build.gradle
- 使用gradle進行編譯原始碼,此程序中需要去maven的倉庫中下載各種jar包等檔案,為了提高下載的速度,可以配置成從國內的maven倉庫下載檔案,方法如下:
cd azkaban-4.0.0
vim build.gradle
# 添加maven倉庫url
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
maven{ url 'http://maven.oschina.net/content/groups/public/'}

3. 開始編譯
./gradlew build installDist -x test
# 開始下載,控制臺會列印如下類似的日志
Downloading https://services.gradle.org/distributions/gradle-4.6-all.zip
..........
4. 獲得安裝包
編譯成功后獲得安裝包和檔案:
| 安裝包 | 說明 |
|---|---|
| azkaban-web-server-0.1.0-SNAPSHOT.tar.gz | Azkaban Web服務安裝包 |
| azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz | Azkaban 執行服務安裝包 |
| azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz | Azkaban 單機安裝包 |
| create-all-sql-0.1.0-SNAPSHOT.sql | 編譯之后的sql腳本 |
| execute-as-user.c | C程式檔案腳本 |
multiple executor模式安裝
前提:某節點已經安裝mysql,這里我們以node03已經安裝mysql為例,若沒有特殊說明,所有操作都是使用
hadoop普通用戶操作,
1. 資料庫準備
mysql -uroot -p123456
-- 設定密碼的驗證強度等級
set global validate_password_policy=LOW;
set global validate_password_length=6;
-- 創建資料庫azkaban,用于存盤使用azkaban框架程序中產生的資料
CREATE DATABASE azkaban;
CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban';
GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban.* to 'azkaban'@'%' identified by 'azkaban' WITH GRANT OPTION;
flush privileges;
use azkaban;
source /bigdata/soft/create-all-sql-0.1.0-SNAPSHOT.sql;
exit;

- 更改 MySQL 包大小:防止 Azkaban 連接 MySQL 阻塞
sudo vim /etc/my.cnf
# 在檔案末尾增加如下內容,然后保存、退出
max_allowed_packet=1024M
- 重啟 mysql 服務
sudo /sbin/service mysqld restart
# 輸出如下日志
Redirecting to /bin/systemctl restart mysqld.service
3. 解壓軟體安裝包
mkdir -p /bigdata/install/azkaban-4.0.0
# 解壓縮
tar -zxvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz -C /bigdata/install/azkaban-4.0.0/
tar -zxvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz -C /bigdata/install/azkaban-4.0.0/
cd /bigdata/install/azkaban-4.0.0/
# 重命名
mv azkaban-web-server-0.1.0-SNAPSHOT/ azkaban-web-server-4.0.0
mv azkaban-exec-server-0.1.0-SNAPSHOT/ azkaban-exec-server-4.0.0
4. 安裝SSL安全認證
- 安裝ssl安全認證,允許我們使用https的方式訪問我們的azkaban的web服務,密碼一定要一個個的字母輸入,或者粘貼也行,
cd azkaban-web-server-4.0.0/
keytool -keystore keystore -alias jetty -genkeypair -keyalg RSA
- 具體輸入如下:
- 密碼都是azkaban
- 顯示[Unknown]:直接敲回車
- 顯示[no]:輸入yes,回車
- jetty密碼:azkaban

- 如果是英文環境,上圖中的“是”用“yes”代替,此時,發現目錄中多出一個秘鑰檔案
keystore
# keytool中有很多的cmd及option;查看keytool用法
[hadoop@node03 azkaban-web-server-4.0.0]$ man keytool
# 提示:搜索關鍵字,如-genkeypair
OPTION DEFAULTS
The following examples show the defaults for various option values.
-alias "mykey"
-keystore <the file named .keystore in the user's home directory>
-genkeypair 生成一個秘鑰對(公鑰、私鑰)
-keyalg RSA 指定使用某演算法生成秘鑰對
4. 安裝azkaban web server
- 第一步:
cd /bigdata/install/azkaban-4.0.0/azkaban-web-server-4.0.0修改 azkaban-web-server 的組態檔,vim conf/azkaban.properties,修改內容如下
# Azkaban Personalization Settings
azkaban.name=Azkaban
azkaban.label=My Azkaban
...
default.timezone.id=Asia/Shanghai
# Azkaban UserManager class
# azkaban內置的UserManager用戶管理器,當啟動web server時,`XmlUserManager`會讀取組態檔`azkaban.properties`,然后決議`azkaban-users.xml`
user.manager.class=azkaban.user.XmlUserManager
# 此xml檔案中用來配置azkaban的用戶、組、角色
user.manager.xml.file=conf/azkaban-users.xml
...
# Azkaban Jetty server properties.
jetty.use.ssl=true
...
# 新增內容
jetty.ssl.port=8443
jetty.keystore=/bigdata/install/azkaban-4.0.0/azkaban-web-server-4.0.0/keystore
jetty.password=azkaban
jetty.keypassword=azkaban
jetty.truststore=/bigdata/install/azkaban-4.0.0/azkaban-web-server-4.0.0/keystore
jetty.trustpassword=azkaban
...
mysql.host=node03
...
azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus
- 說明:
- StaticRemainingFlowSize:正在排隊的任務數;
- CpuStatus: CPU 占用情況
- MinimumFreeMemory:記憶體占用情況, 測驗環境, 必須將 MinimumFreeMemory 洗掉掉,否則它會認為集群資源不夠,不執行,
- 第二步:設定 azkaban 用戶,
vim conf/azkaban-users.xml,修改如下
<user password="abc123" roles="myread" username="abcread"/>
<user password="abc123" roles="mywrite" username="abcwrite"/>
<user password="abc123" roles="admin" username="abcadmin"/>
<user password="abc123" roles="myread, mywrite" username="abcrwe" groups="groupx"/>
<group name="groupx" roles="myexe"/>
<role name="myread" permissions="READ"/>
<role name="mywrite" permissions="WRITE"/>
<role name="myexe" permissions="EXECUTE"/>

-
此檔案格式決議,可以參考官網檔案
-
user 格式
| Attributes | Values | Required? |
|---|---|---|
| username | 登錄用戶名 The login username. | 必須有 |
| password | 密碼 The login password. | 必須有 |
| roles | role角色,如果是多個角色的話,中間逗號分隔 Comma delimited list of roles that this user has. | 非必須 |
| groups | 用戶所屬組,如果是多個組,中間逗號分隔 Comma delimited list of groups that the users belongs to. | 非必須 |
| proxy | 代理 Comma delimited list of proxy users that this users can give to a project | 非必須 |
- group 格式
| Attributes | Values | Required? |
|---|---|---|
| name | 組名 The group name | 必須有 |
| roles | role角色,如果是多個角色的話,中間逗號分隔 Comma delimited list of roles that this user has. | 非必須 |
- role 格式
| Attributes | Values | Required? |
|---|---|---|
| name | role角色名稱 The role name | 必須有 |
| permissions | 權限,如果是多個權限的話,中間逗號分隔 Comma delimited list global permissions for the role | 必須有 |
- 可選的權限有
| Permissions | Values |
|---|---|
| ADMIN | 管理員權限,擁有azkaban中所有的權限 Grants all access to everything in Azkaban. |
| READ | 對每個project有只讀權限 Gives users read only access to every project and their logs |
| WRITE | 允許用戶上傳檔案、修改job的properties、洗掉project Allows users to upload files, change job properties or remove any project |
| EXECUTE | 允許用戶執行任何flow Allows users to trigger the execution of any flow |
| SCHEDULE | 允許用戶給任意flow添加或移除指定的調度 Users can add or remove schedules for any flows |
| CREATEPROJECTS | 如果創建project功能被鎖死,有此權限的用戶擁有創建project的權限 Allows users to create new projects if project creation is locked down |
- 官網配置
5. 安裝azkaban executor server
- 第一步:
cd /bigdata/install/azkaban-4.0.0/azkaban-exec-server-4.0.0修改azkaban-exec-server的組態檔,vim conf/azkaban.properties,修改內容如下
# Azkaban Personalization Settings
azkaban.name=Azkaban
azkaban.label=My Azkaban
...
default.timezone.id=Asia/Shanghai
...
jetty.use.ssl=true
......
# 新增內容 添加如下5行內容
jetty.keystore=/bigdata/install/azkaban-4.0.0/azkaban-web-server-4.0.0/keystore
jetty.password=azkaban
jetty.keypassword=azkaban
jetty.truststore=/bigdata/install/azkaban-4.0.0/azkaban-web-server-4.0.0/keystore
jetty.trustpassword=azkaban
...
# Where the Azkaban web server is located
azkaban.webserver.url=https://node03:8443
...
mysql.host=node03
...
- 第二步:添加插件,將我們編譯后的 C 檔案
execute-as-user.c拷貝到/bigdata/install/azkaban-4.0.0/azkaban-exec-server-4.0.0/plugins/jobtypes
cp /bigdata/soft/execute-as-user.c /bigdata/install/azkaban-4.0.0/azkaban-exec-server-4.0.0/plugins/jobtypes
- 然后執行以下命令生成 execute-as-user
cd /bigdata/install/azkaban-4.0.0/azkaban-exec-server-4.0.0/plugins/jobtypes
sudo yum -y install gcc-c++
gcc execute-as-user.c -o execute-as-user
sudo chown root execute-as-user
sudo chmod 6050 execute-as-user

- 第三步:修改組態檔
vim commonprivate.properties,增加或修改如下內容
# true: 表示azkaban的登錄用戶,同時作為linux服務器系統的用戶
execute.as.user=true
azkaban.native.lib=/bigdata/install/azkaban-4.0.0/azkaban-exec-server-4.0.0/plugins/jobtypes
# 表示,這些azkaban用戶(linux系統用戶)都屬于`myazkaban`用戶組
azkaban.group.name=myazkaban
memCheck.enabled=false
- 將exec拷貝到另外兩個節點,并修改所屬用戶
cd /bigdata/install/azkaban-4.0.0
scp -r azkaban-exec-server-4.0.0/ hadoop@node01:$PWD
scp -r azkaban-exec-server-4.0.0/ hadoop@node02:$PWD
# node01、node02上分別執行
cd /bigdata/install/azkaban-4.0.0/azkaban-exec-server-4.0.0/plugins/jobtypes
sudo chown root execute-as-user
sudo chmod 6050 execute-as-user
- 第四步:添加用戶、用戶組
- 需要在 3 個 exec 服務器中,創建用戶
abcrwe、用戶組myazkaban,并且用戶abcrwe屬于用戶組myazkaban - 為了解決權限問題,同時將用戶
abcrwe添加附屬組hadoop中 - 此處以
abcrwe用戶為例(如果使用其他用戶,按照此方式創建即可)具體命令如下
- 需要在 3 個 exec 服務器中,創建用戶
# node01、node02、node03都執行如下命令
sudo groupadd myazkaban
[sudo] hadoop 的密碼:
sudo useradd -g myazkaban abcrwe
sudo passwd abcrwe
新的 密碼:123456
重新輸入新的密碼:
# 將 abcrwe 添加附加用戶組
sudo usermod -a -G hadoop abcrwe
# 查看用戶 abcrwe
sudo id abcrwe
uid=1002(abcrwe) gid=1002(myazkaban) 組=1002(myazkaban),1001(hadoop)
- exec 服務器在執行 flow 時,會在
/bigdata/install/azkaban-4.0.0/azkaban-exec-server-4.0.0目錄創建目錄executions,為了解決權限問題,3臺節點都需要做如下操作
cd /bigdata/install/azkaban-4.0.0/azkaban-exec-server-4.0.0
mkdir executions
sudo chown :myazkaban executions/
6. 啟動服務
- 第一步:啟動azkaban exec server
# node01
cd /bigdata/install/azkaban-4.0.0/azkaban-exec-server-4.0.0
bin/start-exec.sh
# 關閉exec server: `bin/shutdown-exec.sh`
jps
14014 AzkabanExecutorServer
- 第二步:激活exec-server,每次啟動exec都需要激活
# node01
cd /bigdata/install/azkaban-4.0.0/azkaban-exec-server-4.0.0
curl -G "node01:$(<./executor.port)/executor?action=activate" && echo
# 輸出
{"status":"success"}
- 分別在 node02、node03 上啟動 exec server 并激活
# node02
bin/start-exec.sh
jps
curl -G "node02:$(<./executor.port)/executor?action=activate" && echo
# node03
bin/start-exec.sh
jps
curl -G "node03:$(<./executor.port)/executor?action=activate" && echo
- 三個節點的exec server都啟動后,可以去mysql中確認下,node03執行命令
mysql> select * from executors;
+----+--------+-------+--------+
| id | host | port | active |
+----+--------+-------+--------+
| 1 | node01 | 44066 | 1 |
| 2 | node02 | 40791 | 1 |
| 3 | node03 | 41330 | 1 |
+----+--------+-------+--------+
3 rows in set (0.00 sec)
- 發現,確實有3個exec server,active=1,表示已激活
- 第三步:啟動 azkaban-web-server
# node03
cd /bigdata/install/azkaban-4.0.0/azkaban-web-server-4.0.0
bin/start-web.sh
# 關閉web server命令:`bin/shutdown-web.sh`
jps
8142 AzkabanWebServer
- 宿主機瀏覽器訪問地址:https://node03:8443

- 登錄后,進入界面

7. 修改linux的時區問題
-
之前在安裝虛擬機時,已經設定時區為“亞洲/上海”所以不用擔心時區問題,不需要修改時區
注:先配置好服務器節點上的時區
-
但是如果你的時區不是“亞洲/上海”,那么需要修改成此時區
-
確認時區 :
CST +0800表示時區是東八區(“亞洲/上海”)
$ date +"%Z %z"
CST +0800
- 生成時區組態檔Asia/Shanghai,用互動式命令 tzselect 即可
# 拷貝該時區檔案,覆寫系統本地時區配置
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/404099.html
標籤:其他
