天天看點

大資料技術之Azkaban一、 概述二、Azkaban安裝部署

一、 概述

1.1 為什麼需要工作流排程系統

(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.2 Azkaban的适用場景

根據以上業務場景: (2)任務依賴(1)任務的結果,(3)任務依賴(2)任務的結果,(4)任務依賴(3)任務的結果,(5)任務依賴(4)任務的結果。一般的做法是,先執行完(1)再執行(2),再一次執行(3)(4)(5)。

這樣的話,整個的執行過程都需要人工參加,并且得盯着各任務的進度。但是我們的

很多任務都是在深更半夜執行的

,通過寫腳本設定crontab執行。其實,整個過程類似于一個

有向無環圖

(DAG)。每個子任務相當于大任務中的一個節點,也就是,我們

需要的就是一個工作流的排程器

,而Azkaban就是能解決上述問題的一個排程器。

1.3 什麼是azkaban

Azkaban是由Linkedin公司推出的一個

批量工作流任務排程器

,主要用于在一個工作流内以一個特定的順序運作一組工作和流程,它的配置是通過簡單的

key:value

對的方式,通過配置中的dependencies 來設定依賴關系。Azkaban使用job配置檔案建立任務之間的依賴關系,并提供一個易于使用的web使用者界面維護和跟蹤你的工作流。

1.4 Azkaban特點

  1. 相容任何版本的hadoop
  2. 易于使用的Web使用者界面
  3. 簡單的工作流的上傳
  4. 友善設定任務之間的關系
  5. 排程工作流
  6. 子產品化和可插拔的插件機制
  7. 認證/授權(權限的工作)
  8. 能夠殺死并重新啟動工作流
  9. 有關失敗和成功的電子郵件提醒

1.5 常見工作流排程系統

(1)

簡單的任務排程

:直接使用crontab實作;

(2)

複雜的任務排程

:開發排程平台或使用現成的開源排程系統,比如ooize、azkaban等

1.6 ooize和azkaban特性對比

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

大資料技術之Azkaban一、 概述二、Azkaban安裝部署

1.7 Azkaban的架構

Azkaban由三個關鍵元件構成:

大資料技術之Azkaban一、 概述二、Azkaban安裝部署
  1. AzkabanWebServer:AzkabanWebServer是整個Azkaban工作流系統的

    主要管理者

    ,它使用者登入認證、負責project管理、定時執行工作流、跟蹤工作流執行進度等一系列任務。
  1. AzkabanExecutorServer:負責具體的工作流的送出、執行,它們通過mysql資料庫來協調任務的執行。
  1. 關系型資料庫(MySQL):存儲大部分執行流狀态,AzkabanWebServer和AzkabanExecutorServer都需要通路資料庫。

1.8 Azkaban下載下傳位址

連結:http://azkaban.github.io/downloads.html

二、Azkaban安裝部署

2.1 安裝前準備

  1. 将Azkaban Web伺服器、Azkaban執行伺服器、Azkaban的sql執行腳本及MySQL安裝包拷貝到bigdata111虛拟機/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
           
  1. 選擇Mysql作為Azkaban資料庫,因為Azkaban建立了一些Mysql連接配接增強功能,以友善Azkaban設定,并增強服務可靠性。

2.2 安裝Azkaban

(1)在/opt/module/目錄下建立azkaban目錄

[itstar@bigdata111 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目錄下

[itstar@bigdata111 software]$ tar -zxvf azkaban-web-server-2.5.0.tar.gz -C 
/opt/module/azkaban/

[itstar@bigdata111 software]$ tar -zxvf azkaban-executor-server-2.5.0.tar.gz -C 
/opt/module/azkaban/

[itstar@bigdata111 software]$ tar -zxvf azkaban-sql-script-2.5.0.tar.gz -C 
/opt/module/azkaban/
           

(3)對解壓後的檔案重新命名

[itstar@bigdata111 azkaban]$ mv azkaban-web-2.5.0/ server

[itstar@bigdata111 azkaban]$ mv azkaban-executor-2.5.0/ executor
           

(4)azkaban腳本導入

進入mysql,建立azkaban資料庫,并将解壓的腳本導入到azkaban資料庫。

[itstar@bigdata111 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
           
注:source後跟

.sql

檔案,用于批量處理.sql檔案中的sql語句。

2.3 生成密鑰庫

Keytool是java資料證書的管理工具,使使用者能夠管理自己的公/私鑰對及相關證書。

-keystore 指定密鑰庫的名稱及位置(産生的各類資訊将不在.keystore檔案中)
-genkey 在使用者主目錄中建立一個預設檔案".keystore"
-alias 對我們生成的.keystore 進行指認别名;如果沒有預設是mykey
-keyalg 指定密鑰的算法 RSA/DSA 預設是DSA

(1)生成 keystore的密碼及相應資訊的密鑰庫

[itstar@bigdata111 azkaban]$ keytool -keystore keystore -alias 
jetty -genkey -keyalg RSA
           

輸入密鑰庫密碼: 000000

再次輸入新密碼: 000000

您的名字與姓氏是什麼?
  [Unknown]: 

您的組織機關名稱是什麼?
  [Unknown]: 

您的組織名稱是什麼?
  [Unknown]: 

您所在的城市或區域名稱是什麼?
  [Unknown]: 

您所在的省/市/自治區名稱是什麼?
  [Unknown]: 

該機關的雙字母國家/地區代碼是什麼?
  [Unknown]: 

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

  [否]:  y


輸入 <jetty> 的密鑰密碼:000000

(如果和密鑰庫密碼相同, 按回車):  

再次輸入新密碼:     000000
           

注意:

密鑰庫的密碼至少必須

6個字元

,可以是純數字或者字母或者數字和字母的組合等等

密鑰庫的密碼最好和 的密鑰相同,友善記憶

(2)将keystore 拷貝到 azkaban web伺服器根目錄中

2.4 時間同步配置

先配置好伺服器節點上的時區

(1)如果在/usr/share/zoneinfo/這個目錄下不存在時區配置檔案Asia/Shanghai,就要用

tzselect

生成。

[itstar@bigdata111 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 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:      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)拷貝該時區檔案,覆寫系統本地時區配置

[itstar@bigdata111 azkaban]$ cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime  
           

(3)叢集時間同步(同時發給三個視窗)

2.5 配置檔案

2.5.1 Web伺服器配置

(1)進入azkaban web伺服器安裝目錄 conf目錄,打開

azkaban.properties

檔案

[itstar@bigdata111 conf]$ pwd 
/opt/module/azkaban/server/conf

[itstar@bigdata111 conf]$ vi 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=bigdata112

#資料庫執行個體名
mysql.database=azkaban

#資料庫使用者名
mysql.user=root

#資料庫密碼
mysql.password=000000

#最大連接配接數
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=000000

#Jetty主密碼與keystore檔案相同
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

檔案,增加管理者使用者。

[itstar@bigdata111 conf]$ vi 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,metrics" />
	<role name="admin" permissions="ADMIN" />
	<role name="metrics" permissions="METRICS"/>
</azkaban-users>
           

2.5.2 執行伺服器配置

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

[itstar@bigdata111 conf]$ pwd
/opt/module/azkaban/executor/conf

[itstar@bigdata111 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=bigdata112
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伺服器目錄下執行啟動指令

[itstar@bigdata111 executor]$ pwd
/opt/module/azkaban/executor

[itstar@bigdata111 executor]$ bin/azkaban-executor-start.sh
           

2.7 啟動web伺服器

在azkaban web伺服器目錄下執行啟動指令

[itstar@bigdata111 server]$ pwd
/opt/module/azkaban/server

[itstar@bigdata111 server]$ bin/azkaban-web-start.sh
           

注意:

先執行executor,再執行web,避免Web Server會因為找不到執行器啟動失敗。

jps檢視程序:

[itstar@bigdata111 server]$ jps

3601 AzkabanExecutorServer
5880 Jps
3661 AzkabanWebServer
           

啟動完成後,在浏覽器(建議使用谷歌浏覽器)中輸入

https://伺服器IP位址:8443

,即可通路azkaban服務了。

在登入中輸入剛才在azkaban-users.xml檔案中新添加的戶用名及密碼,即

admin

admin

,點選 login。

登入界面如下:

大資料技術之Azkaban一、 概述二、Azkaban安裝部署

繼續閱讀