天天看點

工作流排程系統——Azkaban第 1 節 概述第 2 節 Azkaban介紹第 3 節 Azkaban安裝部署第 4 節 Azkaban使用

文章内容輸出來源:拉勾教育大資料高薪訓練營

第 1 節 概述

1.1 工作流排程系統

⼀個完整的資料分析系統通常都是由⼤量任務單元組成:

  • shell腳本程式
  • java程式
  • mapreduce程式
  • hive腳本等

各任務單元之間存在時間先後及前後依賴關系,為了很好地組織起這樣的複雜執行計劃,需要⼀個工作流排程系統來排程任務的執行。

假如,我有這樣一個需求,某個業務系統每天産生20G原始資料,每天都要對其進行處理,處理步驟如下所示:

  • 通過Hadoop先将原始資料同步到HDFS上;
  • 借助MapReduce計算架構對原始資料進行轉換,生成的資料以分區表的形式存儲到多張Hive表中;
  • 需要對Hive中多個表的資料進行JOIN處理,得到一個明細資料Hive大表;
  • 将明細資料進行各種統計分析,得到結果報表資訊;
  • 需要将統計分析得到的結果資料同步到業務系統中,供業務調用使用。

1.2 工作流排程實作方式

  • 簡單的任務排程
    • 直接使用linux的crontab
  • 複雜的任務排程
    • 開發排程平台或使用現成的開源排程系統,比如Ooize、Azkaban、Airflow等

1.3 Azkaban與Oozie對比

對市⾯上最流行的兩種排程器,進行對⽐分析。總體來說,Ooize相⽐Azkaban是⼀個重量級的任務排程系統,功能全面,但配置使用也更複雜(xml)。如果可以不在意某些功能的缺失,輕量級排程器Azkaban是很不錯的候選對象。

  • 功能

兩者均可以排程mapreduce,pig,java,腳本⼯作流任務

兩者均可以定時執⾏工作流任務

  • ⼯作流定義

Azkaban使⽤Properties檔案定義工作流

Oozie使⽤XML檔案定義工作流

  • ⼯作流傳參

Azkaban⽀持直接傳參,例如${input}

Oozie支援參數和EL表達式,例如${fs:dirSize(myInputDir)}

  • 定時執⾏

Azkaban的定時執行任務是基于時間的

Oozie的定時執⾏任務基于時間和輸入資料

  • 資源管理

Azkaban有較嚴格的權限控制,如使用者對⼯作流進行讀/寫/執行等操作

Oozie暫⽆嚴格的權限控制

  • ⼯作流執⾏

Azkaban有兩種運行模式,分别是solo server mode(executor server和web server部署在同一台節點)和multi server mode(executor server和web server可以部署在不同節點)

Oozie作為⼯作流伺服器運⾏,⽀持多使用者和多工作流

第 2 節 Azkaban介紹

Azkaban是由linkedin(領英)公司推出的⼀個批量工作流任務排程器,⽤于在一個⼯作流内以一個特定的順序運行⼀組工作和流程。Azkaban使用job配置檔案建立任務之間的依賴關系,并提供一個易于使用的web⽤戶界面維護和跟蹤你的工作流。

工作流排程系統——Azkaban第 1 節 概述第 2 節 Azkaban介紹第 3 節 Azkaban安裝部署第 4 節 Azkaban使用

Azkaban定義了一種KV⽂件(properties)格式來建立任務之間的依賴關系,并提供一個易于使用的web使用者界⾯維護和跟蹤你的工作流。

有如下功能特點

  • Web⽤戶界⾯
  • ⽅便上傳工作流
  • 友善設定任務之間的關系
  • 排程工作流

架構⻆色

  • mysql伺服器: 存儲中繼資料,如項⽬名稱、項目描述、項目權限、任務狀态、SLA規則等
  • AzkabanWebServer:對外提供web服務,使使用者可以通過web⻚面管理。職責包括項⽬管理、權限授權、任務排程、監控executor。
  • AzkabanExecutorServer:負責具體的工作流的送出、執行。

第 3 節 Azkaban安裝部署

3.1 Azkaban的安裝準備工作

1 編譯

這⾥選⽤azkaban3.51.0這個版本⾃己進行重新編譯,編譯完成之後得到我們需要的安裝包進行安裝

cd /opt/lagou/software/

wget https://github.com/azkaban/azkaban/archive/3.51.0.tar.gz

tar -zxvf 3.51.0.tar.gz -C ../servers/

cd /opt/lagou/servers/azkaban-3.51.0/

yum -y install git
yum -y install gcc-c++

./gradlew build installDist -x test
           

Gradlew是一個基于Apache Ant和Apache Maven的項⽬自動化建構工具。-x test 跳過測試。(注意聯網!下載下傳jar可能會失敗、慢)

2 上傳編譯後的安裝檔案

工作流排程系統——Azkaban第 1 節 概述第 2 節 Azkaban介紹第 3 節 Azkaban安裝部署第 4 節 Azkaban使用

在linux122節點建立⽬錄

mkdir /opt/lagou/servers/azkaban
           

3.2 solo-server模式部署

1. 單服務模式安裝

1 解壓

azkaban的solo server使用的是一個單節點的模式來進行啟動服務的,隻需要一個azkaban-solo- server-0.1.0-SNAPSHOT.tar.gz的安裝包即可啟動,所有的資料資訊都是儲存在H2這個azkaban預設的資料當中

tar -zxvf azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz -C ../../servers/azkaban
           

2 修改配置⽂件

修改時區

cd /opt/lagou/servers/azkaban/azkaban-solo-server-0.1.0-SNAPSHOT/conf
vim azkaban.properties
default.timezone.id=Asia/Shanghai
           
工作流排程系統——Azkaban第 1 節 概述第 2 節 Azkaban介紹第 3 節 Azkaban安裝部署第 4 節 Azkaban使用

 修改commonprivate.properties配置檔案

cd /opt/lagou/servers/azkaban/azkaban-solo-server-0.1.0-SNAPSHOT/plugins/jobtypes

vim commonprivate.properties
execute.as.user=false
memCheck.enabled=false
           

azkaban預設需要3G的記憶體,剩餘記憶體不足則會報異常。

3 啟動solo-server

cd /opt/lagou/servers/azkaban/azkaban-solo-server-0.1.0-SNAPSHOT
bin/start-solo.sh
           
工作流排程系統——Azkaban第 1 節 概述第 2 節 Azkaban介紹第 3 節 Azkaban安裝部署第 4 節 Azkaban使用

4 浏覽器⻚面通路

http://linux122:8081/index

工作流排程系統——Azkaban第 1 節 概述第 2 節 Azkaban介紹第 3 節 Azkaban安裝部署第 4 節 Azkaban使用
使用者名:azkaban 密碼: azkaban
           
工作流排程系統——Azkaban第 1 節 概述第 2 節 Azkaban介紹第 3 節 Azkaban安裝部署第 4 節 Azkaban使用

2. 單服務模式使用

需求:使⽤azkaban排程我們的shell腳本,執行linux的shell指令

具體步驟

開發job⽂件

建立普通⽂本檔案foo.job,檔案内容如下

type=command
command=echo 'hello world'
           

打成壓縮包foo.zip,上傳壓縮包到Azkaban

建立project

工作流排程系統——Azkaban第 1 節 概述第 2 節 Azkaban介紹第 3 節 Azkaban安裝部署第 4 節 Azkaban使用

指定project名稱和描述資訊

工作流排程系統——Azkaban第 1 節 概述第 2 節 Azkaban介紹第 3 節 Azkaban安裝部署第 4 節 Azkaban使用

Azkaban上傳壓縮包

工作流排程系統——Azkaban第 1 節 概述第 2 節 Azkaban介紹第 3 節 Azkaban安裝部署第 4 節 Azkaban使用

檢視⼯作流計劃并執⾏

工作流排程系統——Azkaban第 1 節 概述第 2 節 Azkaban介紹第 3 節 Azkaban安裝部署第 4 節 Azkaban使用

執行結果界面

工作流排程系統——Azkaban第 1 節 概述第 2 節 Azkaban介紹第 3 節 Azkaban安裝部署第 4 節 Azkaban使用

停止程式

bin/shutdown-solo.sh
           

3.3 multiple-executor模式部署

1 安裝所需軟體

Azkaban Web服務安裝包

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

Azkaban執行服務安裝包

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

sql腳本

工作流排程系統——Azkaban第 1 節 概述第 2 節 Azkaban介紹第 3 節 Azkaban安裝部署第 4 節 Azkaban使用

節點規劃

工作流排程系統——Azkaban第 1 節 概述第 2 節 Azkaban介紹第 3 節 Azkaban安裝部署第 4 節 Azkaban使用

2 資料庫準備

linux123

#解壓資料庫腳本
tar -zxvf azkaban-db-0.1.0-SNAPSHOT.tar.gz -C /opt/lagou/servers/azkaban
           

進入mysql的用戶端執行以下指令

mysql -uroot -p
-- 設定密碼位數和強度
SET GLOBAL validate_password_length=5;
SET GLOBAL validate_password_policy=0;

-- 建立使用者azkaban
CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban';

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

CREATE DATABASE azkaban;
use azkaban;

-- 加載初始化sql建立表
source /opt/lagou/servers/azkaban/azkaban-db-0.1.0-SNAPSHOT/create-all-sql-0.1.0-SNAPSHOT.sql;
           

執行source後生成的表

工作流排程系統——Azkaban第 1 節 概述第 2 節 Azkaban介紹第 3 節 Azkaban安裝部署第 4 節 Azkaban使用

3 配置Azkaban-web-server

進入linux122節點

解壓azkaban-web-server

tar -zxvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz -C ../../servers/azkaban/
           

進入解壓後的目錄

cd /opt/lagou/servers/azkaban/azkaban-web-server-0.1.0-SNAPSHOT 
#生成ssl證書:
keytool -keystore keystore -alias jetty -genkey -keyalg RSA
           
工作流排程系統——Azkaban第 1 節 概述第 2 節 Azkaban介紹第 3 節 Azkaban安裝部署第 4 節 Azkaban使用

注意:運行此指令後,會提示輸入目前⽣成keystore的密碼及相應資訊,輸入的密碼請記住(所有密碼統一以azkaban輸入)

工作流排程系統——Azkaban第 1 節 概述第 2 節 Azkaban介紹第 3 節 Azkaban安裝部署第 4 節 Azkaban使用

修改 azkaban-web-server的配置檔案

cd /opt/lagou/servers/azkaban-web-server-3.51.0/conf
vim azkaban.properties

# Azkaban Personalization Settings
azkaban.name=Test
azkaban.label=My Local Azkaban
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=web/
default.timezone.id=Asia/Shanghai # 修改點1:時區注意後⾯不要有空格
# Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=conf/azkaban-users.xml
# Azkaban Jetty server properties. 開啟使用ssl 并且指定端⼝
jetty.use.ssl=true # 修改點2:改為true
jetty.port=8443 # 修改點3:端口改為8443
jetty.maxThreads=25
# 修改點4:增加KeyStore for SSL ssl相關配置 
jetty.keystore=keystore 
jetty.password=azkaban 
jetty.keypassword=azkaban 
jetty.truststore=keystore 
jetty.trustpassword=azkaban
注意密碼和證書路路徑
# 修改點5:Azkaban mysql settings by default. Users should configure their own username and password.
database.type=mysql
mysql.port=3306
mysql.host=linux123
mysql.database=azkaban
mysql.user=root
mysql.password=12345678
mysql.numconnections=100
#Multiple Executor 設定為false
azkaban.use.multiple.executors=true 
# 修改點6:注釋掉校驗
#azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,Cp uStatus
azkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1 
azkaban.executorselector.comparator.Memory=1 
azkaban.executorselector.comparator.LastDispatched=1 
azkaban.executorselector.comparator.CpuUsage=1
           

添加屬性

mkdir -p plugins/jobtypes
cd plugins/jobtypes/

vim commonprivate.properties
azkaban.native.lib=false
execute.as.user=false
memCheck.enabled=false
           

4 配置Azkaban-exec-server

linux123節點,上傳exec安裝包到/opt/lagou/software/azkaban

工作流排程系統——Azkaban第 1 節 概述第 2 節 Azkaban介紹第 3 節 Azkaban安裝部署第 4 節 Azkaban使用
tar -zxvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz –C /opt/lagou/servers/azkaban/
           

修改azkaban-exec-server的配置檔案

cd /opt/lagou/servers/azkaban-exec-server-0.1.0-SNAPSHOT/conf
vim azkaban.properties
# 修改點1:修改時區
default.timezone.id=Asia/Shanghai
# 修改點2:webserver url
azkaban.webserver.url=https://linux122:8443
# 修改點3:資料庫配置
database.type=mysql
mysql.port=3306
mysql.host=linux123
mysql.database=azkaban
mysql.user=root
mysql.password=12345678
# 修改點4:增加 Azkaban Executor settings
executor.port=12321
           

分發exec-server到linux121節點

scp -r azkaban-exec-server-0.1.0-SNAPSHOT/ linux121:/opt/lagou/servers/azkaban/
           

5 啟動服務

先啟動exec-server(linux121,linux123)

再啟動web-server(linux122)

#啟動exec-server
bin/start-exec.sh
#啟動web-server
bin/start-web.sh
           

激活exec-server

啟動webServer之後程序失敗消失,可通過安裝包根⽬錄下對應啟動日志進行排查。

需要⼿動激活executor

cd /opt/lagou/servers/azkaban/azkaban-exec-server-0.1.0-SNAPSHOT
curl -G "linux123:$(<./executor.port)/executor?action=activate" && echo
           

通路位址:https://linux122:8443

啟動時遇到的問題:

工作流排程系統——Azkaban第 1 節 概述第 2 節 Azkaban介紹第 3 節 Azkaban安裝部署第 4 節 Azkaban使用

原因:權限不夠

解決辦法:

  • 方式一:配置檔案中mysql配置前面建立的azkaban使用者
  • 方式二:修改root使用者權限,允許其他節點連接配接
-- 賦予最大的權限
GRANT all ON *.* to 'root'@'%' identified by '12345678' WITH GRANT OPTION;
flush privileges;
           

第 4 節 Azkaban使用

4.1 shell command排程

與單機模式操作案例一樣

  • 建立job描述檔案:vim command.job
type=command
command=echo 'hello'
           
  • 将描述檔案打包成command.zip:zip command.job
  • 通過azkaban的web界面建立project并上傳壓縮包
  • 執行該job

4.2 job依賴排程

建立有依賴關系的多個job描述

第一個job:foo.job

type=command
command=echo 'hello'
           

第二個job:bar.job依賴foo.job

type=command
dependencies=foo
command=echo 'bar'
           

将上述兩個檔案打包成一個壓縮包:foobar.zip

在azkaban的web管理界面建立工程并上傳zip包

啟動⼯作流flow

工作流排程系統——Azkaban第 1 節 概述第 2 節 Azkaban介紹第 3 節 Azkaban安裝部署第 4 節 Azkaban使用

4.3 HDFS任務排程

建立job描述檔案fs.job

type=command
command=/opt/lagou/servers/hadoop-2.9.2/bin/hadoop fs -mkdir /azkaban
           

打包、web界面建立project、上傳、啟動執行。

工作流排程系統——Azkaban第 1 節 概述第 2 節 Azkaban介紹第 3 節 Azkaban安裝部署第 4 節 Azkaban使用

4.4 MapReduce任務排程

mr任務依然可以使用command的job類型來執行

建立job描述檔案,及mr程式jar包(示例中直接使用hadoop⾃帶的example jar)

mrwc.job

type=command
command=/opt/lagou/servers/hadoop-2.9.2/bin/hadoop jar hadoop-mapreduce-examples-2.9.2.jar wordcount /wordcount/input /wordcount/azout
           

将所有job資源檔案打到⼀個zip包中

在azkaban的web管理界面建立工程并上傳zip包

啟動job

工作流排程系統——Azkaban第 1 節 概述第 2 節 Azkaban介紹第 3 節 Azkaban安裝部署第 4 節 Azkaban使用

遇到虛拟機記憶體不足運作緩慢的情況:

1. 增大機器記憶體

2. 使用清除系統緩存指令,暫時釋放一些記憶體

[[email protected] mapreduce]# echo 1 >/proc/sys/vm/drop_caches
[[email protected] mapreduce]# echo 2 >/proc/sys/vm/drop_caches
[[email protected] mapreduce]# echo 3 >/proc/sys/vm/drop_caches
           

4.5 Hive腳本任務排程

建立job描述檔案和hive腳本

Hive腳本: test.sql

use default;
drop table aztest;
create table aztest(id int,name string) row format delimited fields terminated by ',';
           

Job描述⽂件:hivef.job

type=command
command=/opt/lagou/servers/hive-2.3.7/bin/hive -f 'test.sql'
           

将所有job資源檔案打到一個zip包中建立工程并上傳zip包,啟動job

4.6 定時任務排程

6 定時任務排程

除了⼿動立即執行工作流任務外,azkaban也支援配置定時任務排程。

開啟方式如下: ⾸頁選擇待處理的project 選擇左邊schedule表示配置定時排程資訊,選擇右邊execute表示⽴即執行工作流任務。

工作流排程系統——Azkaban第 1 節 概述第 2 節 Azkaban介紹第 3 節 Azkaban安裝部署第 4 節 Azkaban使用

繼續閱讀