Azkaban學習_Azkaban(阿茲卡班)介紹 + Azkaban 安裝部署 + Azkaban 實戰

轉載:https://www.cnblogs.com/chenmingjun/p/10506488.html

一 概述

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

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

1.2 常見工作流調度系統

  1)簡單的任務調度:直接使用 linux 的 crontab 來定義。
  2)複雜的任務調度:開發調度平臺或使用現成的開源調度系統,比如 Ooize、Azkaban、Cascading、Hamake 等。

1.3 各種調度工具特性對比

  下面的表格對上述四種 hadoop 工作流調度器的關鍵特性進行了比較,儘管這些工作流調度器能夠解決的需求場景基本一致,但在設計理念,目標用戶,應用場景等方面還是存在顯著的區別,在做技術選型的時候,可以提供參考。

1.4 Azkaban 與 Oozie 對比

  對市面上最流行的兩種調度器,給出以下詳細對比,以供技術選型參考。總體來說,Ooize 相比 Azkaban 是一個重量級的任務調度系統,功能全面,但配置使用也更復雜。如果可以不在意某些功能的缺失,輕量級調度器 Azkaban 是很不錯的候選對象。
詳情如下:
1)功能
  兩者均可以調度 mapreduce,pig,java,腳本工作流任務
  兩者均可以定時執行工作流任務
2)工作流定義
  Azkaban 使用 Properties 文件定義工作流
  Oozie 使用 XML 文件定義工作流
3)工作流傳參
  Azkaban 支持直接傳參,例如${input}
  Oozie 支持參數和 EL 表達式,例如${fs:dirSize(myInputDir)}  
4)定時執行
  Azkaban 的定時執行任務是基於時間的
  Oozie 的定時執行任務基於時間和輸入數據
5)資源管理
  Azkaban 有較嚴格的權限控制,如用戶對工作流進行讀/寫/執行等操作
  Oozie 暫無嚴格的權限控制
6)工作流執行
  Azkaban 有兩種運行模式,分別是 solo server mode(executor server 和 web server 部署在同一臺節點)和 multi server mode(executor server 和 web server 可以部署在不同節點)
  Oozi e作爲工作流服務器運行,支持多用戶和多工作流
7)工作流管理
  Azkaban 支持瀏覽器以及 ajax 方式操作工作流
  Oozie 支持命令行、HTTP REST、Java API、瀏覽器操作工作流

回到頂部

二 Azkaban(阿茲卡班) 介紹

  Azkaban 是由 Linkedin 開源的一個批量工作流任務調度器。用於在一個工作流內以一個特定的順序運行一組工作和流程。Azkaban 定義了一種 KV 文件格式來建立任務之間的依賴關係,並提供一個易於使用的 web 用戶界面維護和跟蹤你的工作流。
它有如下功能特點:
  1)Web 用戶界面
  2)方便上傳工作流
  3)方便設置任務之間的關係
  4)調度工作流
  5)認證/授權(權限的工作)
  6)能夠殺死並重新啓動工作流
  7)模塊化和可插拔的插件機制
  8)項目工作區
  9)工作流和任務的日誌記錄和審計
下載地址:http://azkaban.github.io/downloads.html

回到頂部

三 Azkaban 安裝部署

3.1 安裝前準備

1)將 Azkaban Web 服務器、Azkaban 執行服務器和 MySQL 拷貝到 hadoop102虛擬機的 /opt/software目錄下

azkaban-web-server-2.5.0.tar.gz
azkaban-executor-server-2.5.0.tar.gz
azkaban-sql-script-2.5.0.tar.gz
mysql-libs.zip

2)目前 azkaban 只支持 mysql,需安裝 mysql 服務器,本文檔中默認已安裝好 mysql 服務器,並建立了 root用戶,密碼 root。

3.2 安裝 azkaban

1)在/opt/module/目錄下創建 azkaban 目錄

[atguigu@hadoop102 module]$ mkdir azkaban

2)解壓 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 目錄下

[atguigu@hadoop102 software]$ tar -zxvf azkaban-web-server-2.5.0.tar.gz -C /opt/module/azkaban/
[atguigu@hadoop102 software]$ tar -zxvf azkaban-executor-server-2.5.0.tar.gz -C /opt/module/azkaban/
[atguigu@hadoop102 software]$ tar -zxvf azkaban-sql-script-2.5.0.tar.gz -C /opt/module/azkaban/

3)對解壓後的文件重新命名

[atguigu@hadoop102 azkaban]$ mv azkaban-web-2.5.0/ server
[atguigu@hadoop102 azkaban]$ mv azkaban-executor-2.5.0/ executor

4)azkaban 腳本導入
進入 mysql,創建 azkaban 數據庫,並將解壓的腳本導入到 azkaban 數據庫。

[atguigu@hadoop102 azkaban]$ mysql -uroot -p123456
mysql> create database azkaban;
mysql> use azkaban;
mysql> source /opt/module/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql

:source 後跟 .sql 文件,用於批量處理 .sql 文件中的sql 語句。

3.2 創建 SSL 配置

參考地址: http://docs.codehaus.org/display/JETTY/How+to+configure+SSL
Keytool 是 java 數據證書的管理工具,使用戶能夠管理自己的公/私鑰對及相關證書。
  -keystore 指定密鑰庫的名稱及位置(產生的各類信息將不在 .keystore 文件中)
  -genkey 在用戶主目錄中創建一個默認文件 ".keystore" 
  -alias 對我們生成的 .keystore 進行指認別名;如果沒有默認是 mykey
  -keyalg 指定密鑰的算法 RSA/DSA 默認是 DSA
1)生成 keystore 的密碼及相應信息的密鑰庫

[atguigu@hadoop102 hadoop-2.7.2]$ keytool -keystore keystore -alias jetty -genkey -keyalg RSA

輸入 keystore 密碼:123456
再次輸入新密碼: 123456
您的名字與姓氏是什麼?
  [Unknown]: 
您的組織單位名稱是什麼?
  [Unknown]: 
您的組織名稱是什麼?
  [Unknown]: 
您所在的城市或區域名稱是什麼?
  [Unknown]: 
您所在的州或省份名稱是什麼?
  [Unknown]: 
該單位的兩字母國家代碼是什麼
  [Unknown]:  CN
CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN 正確嗎?
  [否]:  y

輸入<jetty>的主密碼
        (如果和 keystore 密碼相同,按回車): 
再次輸入新密碼:

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

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

[atguigu@hadoop102 hadoop-2.7.2]$ mv keystore /opt/module/azkaban/server/

3.3 時間同步配置

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

[atguigu@hadoop102 Asia]$ 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 country.
 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) Sri 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) Nepal         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 has been given:
    China
    Beijing Time
Therefore TZ='Asia/Shanghai' will be used.
Local time is now:    Wed Jun 14 09:16:46 CST 2017.
Universal Time is now:    Wed Jun 14 01:16:46 UTC 2017.
Is the above information OK?
1) Yes
2) No
#? 1

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

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 

3)集羣時間同步

sudo date -s ‘2017-06-14 09:23:45’
hwclock -w

3.4 配置文件

3.4.1 Web 服務器配置

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

[atguigu@hadoop102 conf]$ pwd
/opt/module/azkaban/server/conf
[atguigu@hadoop102 conf]$ vim 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=123456
#最大連接數
mysql.numconnections=100

# Velocity dev mode
velocity.dev.mode=false

# Azkaban Jetty server properties.
# Jetty 服務器屬性
#最大線程數
jetty.maxThreads=25
#Jetty SSL 端口
jetty.ssl.port=8443
#Jetty 端口
jetty.port=8081
#SSL 文件名(絕對路徑)
jetty.keystore=/opt/module/azkaban/server/keystore
#SSL 文件密碼
jetty.password=123456
#Jetty 主密碼與 keystore 文件相同
jetty.keypassword=123456
#SSL 文件名(絕對路徑)
jetty.truststore=/opt/module/azkaban/server/keystore
#SSL 文件密碼
jetty.trustpassword=123456

# 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

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

<azkaban-users>
    <user username="azkaban" password="azkaban" roles="admin" groups="azkaban" />
    <user username="metrics" password="metrics" roles="metrics"/>
    <user username="admin" password="admin" roles="admin" />
    <role name="admin" permissions="ADMIN" />
    <role name="metrics" permissions="METRICS"/>
</azkaban-users>

3.4.2 執行服務器配置

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

[atguigu@hadoop102 conf]$ pwd
/opt/module/azkaban/executor/conf
[atguigu@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=123456
mysql.numconnections=100

# Azkaban Executor settings
#最大線程數
executor.maxThreads=50
#端口號(如修改,請與 web 服務中一致)
executor.port=12321
#線程數
executor.flow.threads=30

3.5 啓動執行服務器

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

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

3.6 啓動 web 服務器

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

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

注意:先執行 executor,再執行 web,避免 Web Server 會因爲找不到執行器啓動失敗。
jps 查看進程

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

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


登錄之後的頁面

注意:訪問的協議必須是 https,http 協議訪問不了。

回到頂部

四 Azkaban 實戰

Azkaba 內置的任務類型支持 command、java。

4.1 Command 類型之單 job 工作流案例

1)創建 job 描述文件

vim command.job

#command.job
type=command                                                    
command=echo 'hello'

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

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


上傳 zip 包

4)啓動執行該 job

4.2 Command 類型之多 job 工作流案例

1)創建有依賴關係的多個 job 描述
第一個 job:foo.job

# foo.job
type=command
command=echo foo

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

# bar.job
type=command
dependencies=foo
command=echo bar

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


3)創建工程

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

4)啓動工作流 flow
(1)

(2)

(3)

5)查看結果

4.3 HDFS 操作任務

1)創建 job 描述文件

# fs.job
type=command
command=/opt/module/hadoop-2.7.2/bin/hadoop fs -mkdir /azkaban

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


3)通過 azkaban 的 web 管理平臺創建 project 並上傳 job 壓縮包
4)啓動執行該 job
5)查看結果

4.4 MapReduce 任務

Mr 任務依然可以使用 command 的 job 類型來執行
1)創建 job 描述文件,及 mr 程序 jar 包(示例中直接使用 hadoop 自帶的 example jar)

# mrwc.job
type=command
command=/opt/module/hadoop-2.7.2/bin/hadoop jar hadoop-mapreduce-examples-2.7.2.jar wordcount /wordcount/input /wordcount/output

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


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

4.5 HIVE 腳本任務

1)創建 job 描述文件和 hive 腳本
(1)Hive腳本: test.sql

use default;
drop table aztest;
create table aztest(id int, name string) 
row format delimited fields terminated by ',';
load data inpath '/aztest/hiveinput' into table aztest;
create table azres as select * from aztest;
insert overwrite directory '/aztest/hiveoutput' select count(1) from aztest; 

(2)Job描述文件:hivef.job

# hivef.job
type=command
command=/opt/module/hive/bin/hive -f 'test.sql'

2)將所有 job 資源文件打到一個 zip 包中
3)在 azkaban 的 web 管理界面創建工程並上傳 zip 包
4)啓動 job

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