系統講解Azkaban安裝及基本操作實用篇

一,概述
1.1什麼是 Azkaban

	Azkaban是由Linkedin公司推出的一個批量工作流任務調度器,
	主要用於在一個工作流內以一個特定的順序運行一組工作和流程,
	它的配置是通過簡單的key:value對的方式,通過配置中的 Dependencies來設置依賴關係。
	Azkaban使用job配置文件建立任務之間的依賴關係,並提供一個易於使用的 web用戶界面維護和跟蹤你的工作流。

1.2爲什麼需要工作流調度系統

1)一個完整的數據分析系統通常都是由大量任務單元組成:
	Shell腳本程序,Java程序,MapReduce程序、Hive腳本等
2)各任務單元之間存在時間先後及前後依賴關係
3)爲了很好地組織起這樣的複雜執行計劃,需要一個工作流調度系統來調度執行;
	例如,我們可能有這樣一個需求,某個業務系統每天產生  20G原始數據,我們每天都
要對其進行處理,處理步驟如下所示:
	1)通過 Hadoop先將原始數據上傳到 HDFS上(HDFS的操作);
	2)使用 MapReduce對原始數據進行清洗(MapReduce的操作);
	3)將清洗後的數據導入到 hive表中(hive的導入操作);
	4)對 Hive中多個表的數據進行  JOIN處理,得到一張  hive的明細表(創建中間表);
	5)通過對明細表的統計和分析,得到結果報表信息(hive的查詢操作);

在這裏插入圖片描述

1.3 Azkaban 特點

1) 兼容任何版本的hadoop
2) 易於使用的Web 用戶界面
3) 簡單的工作流的上傳
4) 方便設置任務之間的關係
5) 調度工作流
6) 模塊化和可插拔的插件機制
7) 認證/授權(權限的工作)
8) 能夠殺死並重新啓動工作流
9) 有關失敗和成功的電子郵件提醒

1.4 常見工作流調度系統
1)簡單的任務調度:直接使用crontab 實現;
2)複雜的任務調度:開發調度平臺或使用現成的開源調度系統,比如ooize、azkaban 等

1.5 Azkaban 的架構
Azkaban 由三個關鍵組件構成:
在這裏插入圖片描述
1) AzkabanWebServer AzkabanWebServer是整個 Azkaban工作流系統的主要管理者,
它用戶登錄認證、 負責 project管理、 定時執行工作流、跟蹤工作流執行進度等一
系列任務。
2) AzkabanExecutorServer 負責具體的工作流的提交、執行,它們通過 mysql數據庫
來協調任務的執行。
3) 關係型數據庫( MySQL 存儲大部分 執行流 狀態, AzkabanWebServer和
AzkabanExecutorServer都需要訪問數據庫。

1.6 Azkaban下載地址
下載地址:http://azkaban.github.io/downloads.html
網盤地址:https://pan.baidu.com/s/1E4ijWCJrbHRp6BFPUDpA-A 提取碼:9rwg

二 Azkaban安裝部署

2.1 安裝前 準備

1) 將 Azkaban Web服務器、 Azkaban執行服務器 、 Azkaban的 sql執行腳本及 MySQL安
裝包拷貝到 linux的 /opt/software目錄 
	a) azkaban-web-server-2.5.0.tar.gz
	b) azkaban-executor-server-2.5.0.tar.gz
	c) azkaban-sql-script-2.5.0.tar.gz
	d) mysql-libs.zip
2) 選擇 Mysql作爲 Azkaban數據庫,因爲 Azkaban建立了一些 Mysql連接增強功能,以
	方便 Azkaban設置 。 並增強服務可靠性
	網盤地址:https://pan.baidu.com/s/1E4ijWCJrbHRp6BFPUDpA-A  提取碼:9rwg

2.2 安裝 Azkaban

  1. 在 /opt/module/目錄 下創建 azkaban目錄:
[gaol@hadoop102 module]$ mkdir 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到 /opt/module/azkaban目錄下
[gaol@hadoop102 software]$ tar -zxvf azkaban-web-server-2.5.0.tar.gz
-C /opt/module/azkaban/
[gaol@hadoop102   software]$  tar   -zxvf   azkaban-executor-server-
2.5.0.tar.gz -C /opt/module/azkaban/
[gaol@hadoop102 software]$ tar -zxvf azkaban-sql-script-2.5.0.tar.gz
-C /opt/module/azkaban/

  1. 對解壓 後的文件重新命名
[gaol@hadoop102 azkaban]$ mv azkaban-web-2.5.0/ server
[gaol@hadoop102 azkaban]$ mv azkaban-executor-2.5.0/ executor

  1. azkaban腳本導入
    進入 mysql 創建 azkaban數據庫 ,並將解壓的腳本導入到 azkaban數據 庫。
[gaol@hadoop102 azkaban]$ mysql -uroot -p000000
mysql> create database azkaban;
mysql> use azkaban;
mysql> source /opt/module/azkaban/azkaban 2.5.0/create-all-sql-2.5.0.sql

2.3 生成密鑰對和證書,因爲Azkaban是https訪問,所以這一步必須要做

Keytool是 java數據證書的管理工具 ,使用戶能夠管理自己的公 /私鑰 對及相關證書 。
-keystore 指定密鑰庫的名稱 及位置 (產生的各類信息將 存 在 .keystore文件中 )
-genkey(或者 -genkeypair) 生成密鑰對
-alias 爲生成的密鑰對 指定別名, 如果沒有默認是 mykey
-keyalg 指定密鑰的算法 RSA/DSA 默認是 DSA

1)生成 keystore的密碼及相應信息 的 密鑰庫

[gaol@hadoop102 azkaban]$ keytool keystore keystore alias jetty
genkey keyalg RSA
輸入密鑰庫口令 :
再次輸入新口令 :
您的名字與姓氏是什麼
[Unknown]:
您的組織單位名稱是什麼
[Unknown]:
您的組織名稱是什麼
[Unknown]:
您所在的城市或區域名稱是什麼
[Unknown]:
您所在的省 市 自治區名稱是什麼
[Unknown]:
該單位的雙字母國家 地區代碼是什麼
[Unknown]:
CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 是否
正確
否 ]: y
輸入 <jetty> 的密鑰口令
如果和密鑰庫口令相同 , 按回車 ):

注意:
密鑰庫的密碼至少必須6個字符,可以是純數字或者字母或者數字和字母的組合等等
密鑰庫的密碼最好和 的密鑰相同,方便記憶

2)將 keystore 拷貝 到 azkaban web服務器根目錄中

[gaol@hadoop102 azkaban]$ mv keystore /opt/module/azkaban/server/

2.4 時間同步配置

先配置好服務器節點上的時區
1) 如果 在 /usr/share/zoneinfo/這個目錄 下不存在 時區配置文件 Asia/Shanghai 就要用tzselect 生成。
如果存在直接看2.5

[gaol@hadoop102 azkaban]$ tzselect
Please identify a location so that time zone rules can be set correctly.
Please select a continent or ocean.
1) Africa
2) Americas
3) Antarctica
4) Arctic Ocean
5) Asia
6) Atlantic Ocean
7) Australia
8) Europe
9) Indian Ocean
10) Pacific Ocean
11) none I want to specify the time zone using the Posix TZ format.
#? 5
Please select a c ountry.
1) Afghanistan 18) Israel 35) Palestine
2) Armenia 19) Japan 36) Philippines
3) Azerbaijan 20) Jordan 37) Qatar
4) Bahrain 21) Kazakhstan 38) Russia
5) Bangladesh 22) Korea (North) 39) Saudi Arabia
6) Bhutan 23) Korea (South) 40) Singapore
7) Brunei 24) Kuwait 41) Sr i Lanka
8) Cambodia 25) Kyrgyzstan 42) Syria
9) China 26) Laos 43) Taiwan
10) Cyprus 27) Lebanon 44) Tajikistan
11) East Timor 28) Macau 45) Thailand
12) Georgia 29) Malaysia 46) Turkmenistan
13) Hong Kong 30) Mongolia 47) United Arab Emirates
14) India 31) Myanmar (Burma) 48) Uzbekistan
15) Indonesia 32) Nepa l 49) Vietnam
16) Iran 33) Oman 50) Yemen
17) Iraq 34) Pakistan
#? 9
Please select one of the following time zone regions.
1) Beijing Time
2) Xinjiang Time
#? 1
The following information h as been given:
China
Beijing Time
Therefore TZ='Asia/Shanghai' will be used.
Local time is now: Thu Oct 18 16:24:23 CST 2018.
Universal Time is now: Thu Oct 18 08:24:23 UTC 2018.
Is the above information OK?
1) Yes
2) No
#? 1
You can make this change permanent for yourself by appending the line
TZ='Asia/Shanghai'; export TZ
to the file '.profile' in your home directory; then log out and log in
again.
Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
Asia/Shanghai

2 拷貝該時區文件,覆蓋系統本地時區配置

[gaol@hadoop102 azkaban]$ cp /usr/share/zoneinfo/Asia/Shanghai
/etc/localtime

3)集羣時間 同步 (同時發給三個窗口)

[gaol@hadoop102 azkaban]$ sudo date s '2018 10 18 16:39:30'

2.5 配置文件

2.5.1 Web服務器配置

1)進入 azkaban web服務器安裝目錄 conf目錄,打開 azkaban.properties文件

[gaol@hadoop102 conf]$ pwd
/opt/module/azkaban/server/conf
[gaol@hadoop102 conf]$ vi m azkaban.properties

2 按照如下配置修改 azkaban.properties文件。凡是標記有#重要 的都是必須要配置的,仔細對照

#Azkaban Personalization Settings
服務器 UI 名稱 用於服務器上方顯示的名字
azkaban.name=Test
描述
azkaban.label=My Local Azkaban
#UI 顏色
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
#重要
默認 web server 存放 web 文件的目錄
web.resource.dir=/opt/module/azkaban/server/web/
#重要
默認時區 已改爲亞洲 上海 默認爲美國
default.timezone.id=Asia/Shanghai

#Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
#重要
用戶權限管理默認類(絕對路徑)
user.manager.xml.file=/opt/module/azkaban/server/conf/azkaban users.xml
#Loader for projects
#重要
#global 配置文件所在位置(絕對路徑)
executor.global.properties=/opt/module/azkaban/executor/conf/global.properties

azkaban.project.dir=projects
數據庫類型
database.type=mysql
端口號
mysql.port=3306
#重要
數據庫連接 IP
mysql.host=hadoop102
數據庫實例名
mysql.database=azkaban
#重要
數據庫用戶名
mysql.user=root
#重要
數據庫 密碼
mysql.password=000000
最大連接數
mysql.numconnections=100
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server
# Jetty 服務器屬性
最大線程數
jetty.maxThreads=25
#Jetty SSL 端口
jetty.ssl.port=8443
#Jetty 端口
jetty.port=8081
#重要
#SSL 文件名(絕對路徑)
jetty.keystore=/opt/module/az kaban/server/keystore
#重要
#SSL 文件密碼
jetty.password=000000
#重要
#Jetty 主密碼與 keystor e 文件相同
jetty.keypassword=000000
#重要
#SSL 文件名(絕對路徑)
jetty.truststore=/opt/module/azkaban/server/keystore
#重要
#SSL 文件密碼
jetty.trustpassword=000000

# Azkaban Executor settings
executor.port=12321
# mail settings
mail.sender=
mail.host=
job.failure.email=
job.success.email=
lockdown.create.projects=false
cache.directory=cache

3 web服務器 用戶配置
在azkaban web服務器安裝目錄 conf目錄, 按照如下配置修改 azkaban-users.xml 文件,
增加管理員用戶。

[gaol@hadoop102 conf]$ vim azkaban users.xml
<azkaban users>
<user username="azkaban" password="azkaban" roles="admin"
groups="azkaban" />
<user username="metrics" password="metrics" roles="
<user username="admin" password="admin" roles="admin,metrics"/>
<role name="admin" permissions="ADMIN" />

2.5.2 執行服務器配置

1 進入執行服務器安裝目錄 conf,打開 azkaban.properties

[gaol@hadoop102 conf]$ pwd
/opt/module/azkaban/executor/conf
[gaol@hadoop102 conf]$ vim azkaban.properties

2) 按照如下配置修改 azkaban.properties文件。

#Azkaban
#重要
時區
default.timezone.id=Asia/Shanghai
# Azkaban JobTypes Plugins
#jobtype 插件所在位置
azkaban.jobtype.plugin.dir=plugins/jobtypes
#Loader for projects
#重要
executor.global.properties=/opt/module/azkaban/executor/ conf/global.properties
azkaban.project.dir=projects
database.type=mysql
mysql.port=3306
#重要
mysql.host=hadoop102
mysql.database=azkaban
mysql.user=root
mysql.password=000000
mysql.numconnections=100
# Azkaban Executor settings
最大線程數
executor.maxThreads=50
端口號 如修改 請與 web 服務中一致
executor.port=12321
線程數
executor.flow.threads=30

2.6 啓動 Executor服務器

在executor服務器目錄下執行啓動命令

[gaol@hadoop102 executor]$ pwd
/opt/module/azkaban/executor
[gaol@hadoop102 executor]$ bin/azkaban-executor-start.sh

2.7 啓動 Web服務器

在azkaban web服務器目錄下執行啓動命令

[gaol@hadoop102 server]$ pwd
/opt/module/azkaban/server
[gaol@hadoop102 server]$ bin/azkaban-web-start.sh

jps查看進程

[gaol@hadoop102 server ]$ jps
3601 AzkabanExecutorServer
5880 Jps
3661 AzkabanWebServer

啓動完成後,在瀏覽器 (建議使用谷歌瀏覽器 )中輸入 https://服務器 IP地址 :8443 即可訪問azkaban服務了 。
在登錄中輸入剛纔在 azkaban-users.xml文件中 新 添加 的戶用名及密碼 點擊 login。

在這裏插入圖片描述
如果這裏顯示連接不安全,沒關係谷歌瀏覽器點開高級,繼續訪問即可
在這裏插入圖片描述
在這裏插入圖片描述
至此Azkaban安裝完畢

接下來我們來實操一下

三 Azkaban實戰
Azkaban內置的任務類型支持 command、 java

3.1 單一 job案例
1.案例實操

1)創建 job描述文件

[gaol@hadoop102 jobs]$ vim first.job
#first.job
type=command
command=echo 'this is my first job'
  1. 將 job資源文件打包成 zip文件
[gaol@hadoop102 jobs]$ zip first.zip first.job
adding: first.job (deflated 15%)
[gaol@hadoop102 jobs]$ ll
rw rw r ----. 1 gaol gaol 60 10 月 18 17:42 first.jo b
rw rw r ----. 1 gaol gaol 219 10 月 18 17:43 first.zip

注意:
目前,Azkaban上傳的工作流文件只支持 xxx.zip文件。 zip應包含 xxx.job運行作業所需的
文件和任何文件 (文件名後綴必須以 .job結尾,否則無法識別 。作業名稱在項目中必須是
唯一的。

3 通過 azkaban的 web管理平臺創建 project並上傳 job的 zip包
首先創建project
在這裏插入圖片描述
上傳zip包
在這裏插入圖片描述
4 啓動執行該 job
在這裏插入圖片描述
點擊執行工作流
在這裏插入圖片描述

點擊繼續
在這裏插入圖片描述
5)Job執行成功
在這裏插入圖片描述
6 點擊查看 job日誌
在這裏插入圖片描述
至此第一個job運行完畢

3.2 郵件通知配置 案例
1 修改配置文件

修改server的 conf下的 azkaban.properties文件,添加如下:
在這裏插入圖片描述
我這裏發送的是騰訊企業郵箱,可以根據自己的郵箱相應配置

mail.sender=gaol@sqqmall.com #郵件發送者
mail.host=smtp.exmail.qq.com #發送郵件服務器 騰訊qq郵箱的host是:smtp.qq.com  騰訊企業郵箱host是:smtp.exmail.qq.com  126郵箱的host是:smtp.126.com  163郵箱的host是:smtp.163.com
mail.user=gaol@sqqmall.com #郵件發送者
mail.password=  #這裏需要填寫你郵箱的授權碼  

關於授權碼如何獲取可以看這篇文章:授權碼

保存後記得重啓server服務

2)在網頁上進行配置
打開我們第一次執行的作業,然後配置
在這裏插入圖片描述
在這裏插入圖片描述

一個是執行失敗後發送郵件給指定用戶
一個是執行成功後發送郵件給指定用戶

郵件內容:
在這裏插入圖片描述

3.3 多 job工作流 案例
1 創建有依賴關係的多個 job描述

第一個job: start.job

[gaol@hadoop102 jobs]$ vim start.job
#start.job
type=command
command= touch /opt/module/kangkang.txt

第二個job: step1.job依賴 start.job

[gaol@hadoop102 jobs]$ vim step 1 .job
step 1 .job
type=command
dependencies=start
command=echo "this is step 1 job"

第三個job: step2.job依賴 start.job

[gaol@hadoop102 jobs]$ vim step2 .job
step2 .job
type=command
dependencies=start
command=echo "this is step2 job"

第四個 job :finish.job依賴 step1.job和 step2.job

[gaol@hadoop102 jobs]$ vim finish.job
#finish.job
type=command
dependencies= step1,step2
command=echo "this is finish job"

2 將所有 job資源文件打到一個 zip包中

[gaol@hadoop102 jobs]$ zip jobs.zip start.job step1.job step2.job
finish.job
updating: start.job (deflated 16%)
adding: step1.job (deflated 12%)
adding: step2.job (deflated 12%)
adding: finish.job (deflated 14%)

3 在 azkaban的 web管理界面創建工程並上傳 zip包
在這裏插入圖片描述

5 啓動工作流 flow
在這裏插入圖片描述

6 查看結果
在這裏插入圖片描述

多任務流執行成功

3.4 HDFS操作任務

1)創建 job描述文件

[gaol@hadoop102 jobs]$ vim fs.job
#hdfs job
type=command
command=/opt/module/hadoop 2.7.2/bin/hadoop fs mkdir /azkaban

2)將 job資源文件打包成 zip

[gaol@hadoop102 jobs]$ zip fs.zip fs.job
adding: fs.job (deflated 12%)

3)通過 azkaban的 web管理平臺創建 project並上傳 job壓縮包

4)啓動執行該 job

5)查看結果
在這裏插入圖片描述

3.5 MapReduce任務

MapReduce任務依然可以使 用 Azkaban進行調度

1) 創建 job描述文件,及 mr程序 jar包

[gaol@hadoop102 jobs]$ vim mapreduce.job
#mapreduce job
type=command
command=/opt/module/hadoop 2.7.2/bin/hadoop jar /opt/module/hadoop
2.7.2/share/hadoop/mapreduce/hadoop mapreduce examples 2.7.2.jar
wordcount /wordcount/input /wordcount/output

2) 將所有 job資源文件打到一個 zip包中

[gaol@hadoop102 jobs]$ zip mapreduce.z ip mapreduce.job
adding: mapreduce.job (deflated 43%)

3)在azkaban的 web管理界面創建工程並上傳 zip包

4)啓動 job

5)查看結果
在這裏插入圖片描述

3.6 Hive腳本任務
1 )創建 job描述文件和 hive腳本
Hive腳本 student.sql

[gaol@hadoop102 jobs]$ vim student.sql
use default;
drop table student;
create table student(id int, name string)
row format delimited fields terminated by ' t';
load data local inpath '/opt/module/datas/student.txt' into table
student;
insert overwrite local directory '/opt/module/datas/student'
row format delimited fields terminated by ' t'
select * from student;

2) Job描述文件: hive.job

[gaol@hadoop102 jobs]$ vim hive.job
#hive job
type=command
command=/opt/module/hive/bin/hive -f /opt/module/azkaban/jobs/student.sql

3) 將所有 job資源文件打到一個 zip包中

[gaol@hadoop102 jobs]$ zip hive.zip hive.job
adding: hive.job (deflated 21%)
  1. 在 azkaban的 web管理界面創建工程並上傳 zip包

  2. 啓動 job

6)查看結果

在這裏插入圖片描述

至此Azkaban安裝及基本操作完結,後期會出一篇hive+sqoop+Azkaban增量入庫的實操篇
有收穫的小夥伴記得給作者點個贊~
如有疑惑可評論看到後回覆

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章