1. 程式人生 > >大資料教程(13.3)azkaban簡介&安裝

大資料教程(13.3)azkaban簡介&安裝

開發十年,就只剩下這套架構體系了! >>>   

      上一節介紹了Flume多個agent連線配合使用。本節博主將為小夥伴們介紹azkaban的相關概念、簡單的安裝使用。由於azkaban使用新版本太耗時間,需要編譯安裝,所以博主此次就使用編譯好的老版本2.5;等全部教程做完後,博主會將各軟體的最新版本的使用安裝在後面補充章節中推出。

   一、工作流排程器azkaban

          概述

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

                 一個完整的資料分析系統通常都是由大量任務單元組成:shell指令碼程式,java程式,mapreduce程式、hive指令碼等,各任務單元之間存在時間先後及前後依賴關係,為了很好地組織起這樣的複雜執行計劃,需要一個工作流排程系統來排程執行;

                 例如,我們可能有這樣一個需求,某個業務系統每天產生20G原始資料,我們每天都要對其進行處理,處理步驟如下所示:
                 1、通過Hadoop先將原始資料同步到HDFS上;
                 2、藉助MapReduce計算框架對原始資料進行轉換,生成的資料以分割槽表的形式儲存到多張Hive表中;
                 3、需要對Hive中多個表的資料進行JOIN處理,得到一個明細資料Hive大表;
                 4、將明細資料進行復雜的統計分析,得到結果報表資訊;
                 5、需要將統計分析得到的結果資料同步到業務系統中,供業務呼叫使用。

          1.2、工作流排程實現方式

                 簡單的任務排程:直接使用linux的crontab來定義;
                 複雜的任務排程:開發排程平臺或使用現成的開源排程系統,比如ooize、azkaban等

          1.3、常見工作流排程系統

                  市面上目前有許多工作流排程器,在hadoop領域,常見的工作流排程器有Oozie, Azkaban,Cascading,Hamake等

          1.4、各種排程工具特性對比

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

特性

Hamake

Oozie

Azkaban

Cascading

工作流描述語言

XML

XML (xPDL based)

text file with key/value pairs

Java API

依賴機制

data-driven

explicit

explicit

explicit

是否要web容器

No

Yes

Yes

No

進度跟蹤

console/log messages

web page

web page

Java API

Hadoop job排程支援

no

yes

yes

yes

執行模式

command line utility

daemon

daemon

API

Pig支援

yes

yes

yes

yes

事件通知

no

no

no

yes

需要安裝

no

yes

yes

no

支援的hadoop版本

0.18+

0.20+

currently unknown

0.18+

重試支援

no

workflownode evel

yes

yes

執行任意命令

yes

yes

yes

yes

Amazon EMR支援

yes

no

currently unknown

yes

          1.5、Azkaban與Oozie對比

                  對市面上最流行的兩種排程器,給出以下詳細對比,以供技術選型參考。總體來說,ooize相比azkaban是一個重量級的任務排程系統,功能全面,但配置使用也更復雜。如果可以不在意某些功能的缺失,輕量級排程器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作為工作流伺服器執行,支援多使用者和多工作流

                 工作流管理
                 Azkaban支援瀏覽器以及ajax方式操作工作流
                 Oozie支援命令列、HTTP REST、Java API、瀏覽器操作工作流

 二、Azkaban介紹

        Azkaban是由Linkedin開源的一個批量工作流任務排程器。用於在一個工作流內以一個特定的順序執行一組工作和流程。Azkaban定義了一種KV檔案格式來建立任務之間的依賴關係,並提供一個易於使用的web使用者介面維護和跟蹤你的工作流。
        它有如下功能特點:
               Web使用者介面
               方便上傳工作流
               方便設定任務之間的關係
               排程工作流
               認證/授權(許可權的工作)
               能夠殺死並重新啟動工作流
               模組化和可插拔的外掛機制
               專案工作區
               工作流和任務的日誌記錄和審計

        Azkaban安裝部署:

        (1) 準備工作

Azkaban Web伺服器
azkaban-web-server-2.5.0.tar.gz
Azkaban執行伺服器 
azkaban-executor-server-2.5.0.tar.gz
MySQL
目前azkaban的2.5版只支援 mysql,需安裝mysql伺服器,本文件中預設已安裝好mysql伺服器,並建立了 root使用者,密碼 123.
下載地址:http://azkaban.github.io/downloads.html

        (2) 安裝

             將安裝檔案上傳到叢集,最好上傳到安裝 hive、sqoop的機器上,方便命令的執行,在當前使用者目錄下新建 azkabantools目錄,用於存放源安裝檔案.新建azkaban目錄,用於存放azkaban執行程式

             azkaban web伺服器安裝:

#上傳解壓azkaban-web-server-2.5.0.tar.gz
命令: 
Alt+p
put *.gz

mkdir azkaban
mv azkaban-* ./azkaban
cd azkaban/
tar -zxvf azkaban-web-server-2.5.0.tar.gz


#將解壓後的azkaban-web-server-2.5.0重新命名 az-server
命令:
mv azkaban-web-2.5.0    az-server

             azkaban 執行服器安裝:

#解壓azkaban-executor-server-2.5.0.tar.gz
命令:
tar -zxvf azkaban-executor-server-2.5.0.tar.gz 
#將解壓後的azkaban-executor-server-2.5.0重新命名 az-executor
命令:
mv azkaban-executor-2.5.0 az-executor

             azkaban指令碼匯入

解壓: azkaban-sql-script-2.5.0.tar.gz
命令:tar -zxvf azkaban-sql-script-2.5.0.tar.gz 
將解壓後的mysql 指令碼,匯入到mysql中:
進入mysql
mysql> create database azkaban;
mysql> use azkaban;
Database changed
mysql> source /root/azkaban-2.5.0/create-all-sql-2.5.0.sql;

             建立SSL配置

[hadoop@centos-aaron-h1 azkaban]$ keytool -keystore keystore -alias jetty -genkey -keyalg RSA
輸入金鑰庫口令:  
再次輸入新口令: 
您的名字與姓氏是什麼?
  [Unknown]:  aaron
您的組織單位名稱是什麼?
  [Unknown]:  empire
您的組織名稱是什麼?
  [Unknown]:  empire
您所在的城市或區域名稱是什麼?
  [Unknown]:  shanghai
您所在的省/市/自治區名稱是什麼?
  [Unknown]:  shanghai
該單位的雙字母國家/地區程式碼是什麼?
  [Unknown]:  cn
CN=aaron, OU=empire, O=empire, L=shanghai, ST=shanghai, C=cn是否正確?
  [否]:  y

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

             完成上述工作後,將在當前目錄生成 keystore 證書檔案,將keystore 考貝到 azkaban web伺服器根目錄中.如:cp keystore az-server

             配置檔案
             注:先配置好伺服器節點上的時區
                   1、先生成時區配置檔案Asia/Shanghai,用互動式命令 tzselect 即可
                   2、拷貝該時區檔案,覆蓋系統本地時區配置

sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 
sudo date -s '2019-03-07 23:39:46'  
#將時間寫入硬體,重啟後可也可以生效
sudo sudo hwclock -w

             azkaban web伺服器配置
                   進入azkaban web伺服器安裝目錄 conf目錄
                   修改azkaban.properties檔案
                   命令vi 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

#Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=conf/azkaban-users.xml

#Loader for projects
executor.global.properties=conf/global.properties
azkaban.project.dir=projects

database.type=mysql
mysql.port=3306
mysql.host=192.168.29.131
mysql.database=azkaban
mysql.user=root
mysql.password=123456
mysql.numconnections=100

# Velocity dev mode
velocity.dev.mode=false

# Azkaban Jetty server properties.
jetty.maxThreads=25
jetty.ssl.port=8443
jetty.port=8081
jetty.keystore=keystore
jetty.password=123456
jetty.keypassword=123456
jetty.truststore=keystore
jetty.trustpassword=123456

# Azkaban Executor settings
executor.port=12321

# mail settings
[email protected]
mail.host=smtp.163.com
mail.user=aaron
mail.password=xxxx                                     
[email protected]
[email protected]

lockdown.create.projects=false

cache.directory=cache

             azkaban 執行伺服器executor配置
                   進入執行伺服器安裝目錄conf,修改azkaban.properties
                   vi azkaban.properties

#Azkaban
default.timezone.id=Asia/Shanghai

# Azkaban JobTypes Plugins
azkaban.jobtype.plugin.dir=plugins/jobtypes

#Loader for projects
executor.global.properties=conf/global.properties
azkaban.project.dir=projects

database.type=mysql
mysql.port=3306
mysql.host=192.168.29.131
mysql.database=azkaban
mysql.user=root
mysql.password=123456
mysql.numconnections=100

# Azkaban Executor settings
executor.maxThreads=50
executor.port=12321
executor.flow.threads=30

             使用者配置
                   進入azkaban web伺服器conf目錄,修改azkaban-users.xml
                   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>

          啟動

           web伺服器

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

             bin/azkaban-web-start.sh

             注:在web伺服器根目錄執行

             或者啟動到後臺

             nohup  bin/azkaban-web-start.sh  1>/tmp/azstd.out  2>/tmp/azerr.out &

           執行伺服器

             在執行伺服器目錄下執行啟動命令

             bin/azkaban-executor-start.sh

             注:只能要執行伺服器根目錄執行

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

 

             效果如下:

   最後寄語,以上是博主本次文章的全部內容,如果大家覺得博主的文章還不錯,請點贊;如果您對博主其它伺服器大資料技術或者博主本人感興趣,請關注博主部落格,並且歡迎隨時跟