任務排程器之Azkaban的使用

語言: CN / TW / HK

theme: channing-cyan

持續創作,加速成長!這是我參與「掘金日新計劃 · 6 月更文挑戰」的第33天,點選檢視活動詳情

Azkaban概述

Azkaban是由Linkedin開源的一個批量工作流任務排程器。用於在一個工作流內以一個特定的順序執行一組工作和流程。

Azkaban定義了一種KV檔案(properties)格式來建立任務之間的依賴關係,並提供一個易於使用的web使用者介面維護和跟蹤你的工作流。

官網 : https://azkaban.github.io/

安裝Azkaban

下載 ```bash wget https://github.com/azkaban/azkaban/archive/refs/tags/3.73.0.tar.gz

tar -zxvf 3.73.0.tar.gz

mv azkaban-3.73.0 azkaban-src 安裝Gitbash yum ‐y install git yum ‐y install gcc‐c++

[root@administrator program]# git version git version 1.8.3.1 ```

修改azkaban-src目錄下的build.gradle檔案,修改allprojects節點配置,指定倉庫地址為阿里雲倉庫 ```bash

allprojects { apply plugin: 'jacoco' repositories { maven { url 'https://maven.aliyun.com/repository/public/' } mavenLocal() mavenCentral() } } 開始編譯、安裝並跳過測試階段bash cd azkaban/

./gradlew build installDist -x test 最後編譯成功bash BUILD SUCCESSFUL in 4m 52s 82 actionable tasks: 76 executed, 6 from cache ``` 編譯後得到以下檔案

```bash

azkaban-web-server頁面顯示服務

[root@administrator azkaban-src]# ls azkaban-web-server/build/distributions/ azkaban-web-server-0.1.0-SNAPSHOT.tar.gz azkaban-web-server-0.1.0-SNAPSHOT.zip

azkaban-solo-server

[root@administrator azkaban-src]# ls azkaban-solo-server/build/distributions/ azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz azkaban-solo-server-0.1.0-SNAPSHOT.zip

azkaban-exec-server任務執行服務

[root@administrator azkaban-src]# ls azkaban-exec-server/build/distributions/ azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz azkaban-exec-server-0.1.0-SNAPSHOT.zip

two server模式需要的C程式

[root@administrator azkaban-src]# ls az-exec-util/src/main/c execute-as-user.c

資料庫指令碼

[root@administrator azkaban-src]# ll azkaban-db/build/install/azkaban-db/ 總用量 112 -rw-r--r-- 1 root root 12022 3月 12 13:33 create-all-sql-0.1.0-SNAPSHOT.sql

```

單服務模式

Azkaban的單服務模式使用的是一個單節點模式來進行啟動服務,只需要啟動安裝包即可,所有資料儲存在H2記憶體中。

準備

azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz

解壓

解壓azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz ```bash tar -zxvf azkaban-solo-server/build/distributions/azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz -C ../azkaban

[root@administrator azkaban]# ls azkaban-solo-server-0.1.0-SNAPSHOT ```

安裝

修改vim azkaban-solo-server-0.1.0-SNAPSHOT/conf/azkaban.properties檔案,保證與Linxu伺服器時區一致 ```bash

default.timezone.id=America/Los_Angeles

default.timezone.id=Asia/Shanghai `` 修改vim azkaban-solo-server-0.1.0-SNAPSHOT/plugins/jobtypes/commonprivate.properties`檔案

```bash

set execute-as-user

execute.as.user=false

Azkaban對記憶體要求高,關閉記憶體檢查

memCheck.enabled=false ```

啟動solo-server

```bash cd azkaban-solo-server-0.1.0-SNAPSHOT/

bin/start-solo.sh

[root@administrator azkaban-solo-server-0.1.0-SNAPSHOT]# jps 22563 AzkabanSingleServer ```

訪問Web

瀏覽器訪問:IP:8081在這裡插入圖片描述 登陸,使用者名稱與密碼:azkaban在這裡插入圖片描述

使用

建立 Job 描述檔案 vim test.job bash type=command command=echo "hello world" 建立一個專案 在這裡插入圖片描述test.jobjob資原始檔打包成test.zipzip檔案,並上傳 在這裡插入圖片描述 啟動執行job 在這裡插入圖片描述 在這裡插入圖片描述 在這裡插入圖片描述 在這裡插入圖片描述

兩個伺服器模式

準備

azkaban-web-server-0.1.0-SNAPSHOT.tar.gz

azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz

create-all-sql-0.1.0-SNAPSHOT.sql

execute-as-user.c

初始化資料庫

```bash CREATE DATABASE azkaban;

CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban';

GRANT all privileges ON azkaban.* to 'azkaban'@'%' identified by 'azkaban' WITH GRANT OPTION;

flush privileges;

use azkaban;

source /usr/local/program/azkaban-src/azkaban-db/build/install/azkaban-db/create-all-sql-0.1.0-SNAPSHOT.sql ```

解壓

```bash tar -zxvf azkaban-web-server/build/distributions/azkaban-web-server-0.1.0-SNAPSHOT.tar.gz -C ../azkaban

tar -zxvf azkaban-exec-server/build/distributions/azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz -C ../azkaban

[root@administrator azkaban]# ls azkaban-exec-server-0.1.0-SNAPSHOT azkaban-solo-server-0.1.0-SNAPSHOT azkaban-web-server-0.1.0-SNAPSHOT ```

安裝SSL安全認證

安裝SSL安全認證,允許使用https的方式訪問azkaban的web服務

```bash [root@administrator azkaban]# keytool -keystore keystore -alias keyalias -genkey -keyalg RSA 輸入金鑰庫口令:
再次輸入新口令: 您的名字與姓氏是什麼?

Unknown:
CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正確?

輸入 的金鑰口令 (如果和金鑰庫口令相同, 按回車):

Warning: JKS 金鑰庫使用專用格式。建議使用 "keytool -importkeystore -srckeystore keystore -destkeystore keystore -deststoretype pkcs12" 遷移到行業標準格式 PKCS12。 [root@administrator azkaban]# ls azkaban-exec-server-0.1.0-SNAPSHOT azkaban-solo-server-0.1.0-SNAPSHOT azkaban-web-server-0.1.0-SNAPSHOT keystore ```

安裝Azkaban Web Server

安裝azkaban web server,進入cd azkaban-web-server-0.1.0-SNAPSHOT/conf編輯 vim azkaban.properties

```bash

default.timezone.id=America/Los_Angeles

default.timezone.id=Asia/Shanghai

jetty.use.ssl=false

jetty.use.ssl=true

ssl配置

jetty.ssl.port=8443 jetty.keystore=/usr/local/program/azkaban/keystore jetty.password=azkaban jetty.keypassword=azkaban jetty.truststore=/usr/local/program/azkaban/keystore jetty.trustpassword=azkaban

Azkaban mysql settings by default. Users should configure their own username and password.

database.type=mysql mysql.port=3306 mysql.host=localhost mysql.database=azkaban mysql.user=azkaban mysql.password=azkaban mysql.numconnections=100

azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus

azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus

azkaban.activeexecutor.refresh.milisecinterval=10000 azkaban.queueprocessing.enabled=true azkaban.activeexecutor.refresh.flowinterval=10 azkaban.executorinfo.refresh.maxThreads=10 ```

安裝Azkaban Executor Server

安裝azkaban executor server,進入cd azkaban-exec-server-0.1.0-SNAPSHOT/conf編輯vim azkaban.properties

```bash

default.timezone.id=America/Los_Angeles

default.timezone.id=Asia/Shanghai

jetty.use.ssl=false

jetty.use.ssl=true

ssl配置

jetty.ssl.port=8443 jetty.keystore=/usr/local/program/azkaban/keystore jetty.password=azkaban jetty.keypassword=azkaban jetty.truststore=/usr/local/program/azkaban/keystore jetty.trustpassword=azkaban

Where the Azkaban web server is located

azkaban.webserver.url=http://localhost:8081

azkaban.webserver.url=http://localhost:8443

Azkaban mysql settings by default. Users should configure their own username and password.

database.type=mysql mysql.port=3306 mysql.host=localhost mysql.database=azkaban mysql.user=azkaban mysql.password=azkaban mysql.numconnections=100 ``` 新增外掛

將編譯後的C檔案execute-as-user.c拷貝到azkaban-exec-server-0.1.0-SNAPSHOT/plugins/jobtypes目錄

bash cp az-exec-util/src/main/c/execute-as-user.c /usr/local/program/azkaban/azkaban-exec-server-0.1.0-SNAPSHOT/plugins/jobtypes 生成execute-as-user ```bash cd azkaban-exec-server-0.1.0-SNAPSHOT/plugins/jobtypes

[root@administrator jobtypes]# yum -y install gcc-c++

[root@administrator jobtypes]# gcc execute-as-user.c -o execute-as-user [root@administrator jobtypes]# ls commonprivate.properties execute-as-user execute-as-user.c

[root@administrator jobtypes]# chown root execute‐as‐user

[root@administrator jobtypes]# chmod 6050 execute-as-user

[root@administrator jobtypes]# ll 總用量 24 -rw-rw-r-- 1 root root 44 5月 31 2019 commonprivate.properties ---Sr-s--- 1 root root 13536 3月 12 15:33 execute-as-user -rw-r--r-- 1 root root 3976 3月 12 15:30 execute-as-user.c

``` 修改配置檔案

```bash vim commonprivate.properties

set execute-as-user

execute.as.user=false

關閉記憶體檢測

memCheck.enabled=false

指定外掛存放目錄

azkaban.native.lib=/usr/local/program/azkaban/azkaban-exec-server-0.1.0-SNAPSHOT/plugins/jobtypes ```

啟動服務

啟動azkaban exec server

```bash cd azkaban-exec-server-0.1.0-SNAPSHOT

bin/start-exec.sh

[root@administrator azkaban-src]# jps 24655 AzkabanExecutorServer

當azkaban-exec-server-0.1.0-SNAPSHOT目錄下出現executor.port檔案,說明啟動成功

[root@administrator azkaban-exec-server-0.1.0-SNAPSHOT]# ls bin conf currentpid executions executor.port executorServerLog__2022-03-12+15:57:50.out lib logs plugins projects temp `` 啟用exec-server`

bash [root@administrator azkaban-exec-server-0.1.0-SNAPSHOT]# curl -G "node01:$(<./executor.port)/executor?action=activate" && echo {"status":"success"} 啟動azkaban-web-server

```bash cd azkaban-web-server-0.1.0-SNAPSHOT/

bin/start-web.sh

[root@administrator azkaban-src]# jps 11146 AzkabanWebServer ```

訪問Web

瀏覽器訪問IP:8443 在這裡插入圖片描述

注意:放行埠or關閉防火牆

bash systemctl stop firewalld.service

使用測試

單服務模式下的Job資源上傳進行測試 在這裡插入圖片描述

任務提交與執行

Command型別

1.單一Job的使用

1.建立 Job 描述檔案

2.將job資原始檔打包成zip檔案

3.建立工程並上傳zip壓縮包

4.啟動工作流flow,執行job

建立 Job 描述檔案 vim test.job bash type=command command=echo "hello world" 2.多Job的使用

1.建立有依賴關係的多個job描述

2.將所有job資原始檔打到一個zip包中

3.建立工程並上傳zip壓縮包

4.啟動工作流flow,執行job

建立 Job 描述檔案 vim test1.job bash type=command command=echo "test1 hello world" 建立 Job 描述檔案 vim test2.job bash type=command command=echo "test2 hello world" dependencies=test1 上傳後執行時顯示依賴關係 在這裡插入圖片描述 執行過程與結果 在這裡插入圖片描述

定時任務

Azkaban的scheduler功能可以實現對作業任務進行定時排程功能 在這裡插入圖片描述 在這裡插入圖片描述

HDFS操作任務

1.建立job描述檔案

2.將job資原始檔打包成zip檔案

3.建立project並上傳job壓縮包

4.啟動執行該job

vim hdfs.job bash type=command command=/usr/local/program/hadoop/bin/hdfs dfs -mkdir /azkaban 在這裡插入圖片描述

執行後檢視HDFS bash [root@administrator hadoop]# hdfs dfs -ls / Found 6 items drwxr-xr-x - root supergroup 0 2022-03-12 18:37 /azkaban

MapReduce任務

1.下載/usr/local/program/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.2.jar檔案

2.建立job描述檔案 vim mr.job bash type=command command=/usr/local/program/hadoop/bin/hadoop jar hadoop-mapreduce-examples-3.3.2.jar pi 3 5 3.將所有job資原始檔( vim mr.jobhadoop-mapreduce-examples-3.3.2.jar)打到一個zip壓縮包中

4.建立工程並上傳zip包,啟動job 在這裡插入圖片描述

Hive 指令碼任務

1.準備Hive指令碼: hive.sql

bash create database if not exists dbazkaban; use dbazkaban; create table if not exists tbazkaban(id string,name string) row format delimited fields terminated by '\t'; 2.建立job描述檔案 hive.job

bash type=command command=/usr/local/program/hive/bin/hive -f 'hive.sql' 3.將所有job資原始檔打到一個zip包中

4.建立工程並上傳zip包,啟動job 在這裡插入圖片描述