天天看點

azkaban工作流排程器Azkaban工作流排程器

Azkaban工作流排程器

一、課前準備

  1. 安裝好對應版本的mysql
  2. 安裝好對應版本的hadoop叢集
  3. 安裝好對應版本的hive

二、課堂主題

本堂課主要圍繞Azkaban的知識點進行講解。主要包括以下幾個方面

  1. Azkaban的核心概念
  2. Azkaban的架構原理
  3. Azkaban的安裝和使用

三、課堂目标

  1. 掌握Azkaban排程器的使用

四、知識要點

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

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

2. Azkaban是什麼

  • Azkaban是由Linkedin開源的一個批量工作流任務排程器。用于在一個工作流内以一個特定的順序運作一組工作和流程。
  • Azkaban定義了一種KV檔案(properties)格式來建立任務之間的依賴關系,并提供一個易于使用的web使用者界面維護和跟蹤你的工作流。
    • https://azkaban.github.io/
azkaban工作流排程器Azkaban工作流排程器
  • 功能特點
    • 提供功能清晰、簡單易用的web UI界面
    • 提供job配置檔案快速建立任務和任務之間的關系
    • 提供子產品化的可插拔機制,原生支援command、java、hive、hadoop
    • 基于java開發,代碼結構清晰,易于二次開發

3. Azkaban基本架構

azkaban工作流排程器Azkaban工作流排程器
  • Azkaban由三部分構成
    • 1、Azkaban Web Server
      • 提供了Web UI,是azkaban的主要管理者,包括 project 的管理,認證,排程,對工作流執行過程的監控等。
  • 2、Azkaban Executor Server
    • 負責具體的工作流和任務的排程送出
  • 3、Mysql
    • 用于儲存項目、日志或者執行計劃之類的資訊

4. Azkaban架構的三種運作模式

  • 1、solo server mode(單機模式)
H2
web server 和 executor server運作在一個程序裡

最簡單的模式,資料庫内置的H2資料庫,管理伺服器和執行伺服器都在一個程序中運作,任務量不大項目可以采用此模式。

           
  • 2、two server mode
MySQL(主從結構)
web server 和 executor server運作在不同的程序
資料庫為mysql,管理伺服器和執行伺服器在不同程序,這種模式下,管理伺服器和執行伺服器互不影響。

           
  • 3、multiple executor mode
MySQL(主從結構)

web server 和 executor server運作在不同的程序,executor server有多個
該模式下,執行伺服器和管理伺服器在不同主機上,且執行伺服器可以有多個。

           

5. 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
  • 2、規劃安裝目錄
    • /opt/bigdata
  • 3、上傳安裝包到伺服器
  • 4、azkaban web伺服器安裝
    • 4.1 先建立一個目錄
    mkdir /opt/bigdata/azkaban
               
    • 4.2 解壓azkaban-web-server-2.5.0.tar.gz
    tar –zxvf azkaban-web-server-2.5.0.tar.gz -C /opt/bigdata/azkaban
               
    • 4.3 重命名解壓目錄
    mv /opt/bigdata/azkaban/azkaban-web-2.5.0 /opt/bigdata/azkaban/server
               
    • 4.4 配置SSL安全通路協定
      指令: keytool -keystore keystore -alias jetty -genkey -keyalg RSA
      
      運作此指令後,會提示輸入目前生成 keystore的密碼及相應資訊,輸入的密碼請勞記,資訊如下:
      (hadoop) 
      輸入keystore密碼: 
      再次輸入新密碼:
      您的名字與姓氏是什麼?
        [Unknown]: hadoop
      您的組織機關名稱是什麼?
        [Unknown]: hadoop
      您的組織名稱是什麼?
        [Unknown]: hadoop
      您所在的城市或區域名稱是什麼?
        [Unknown]: hadooo
      您所在的州或省份名稱是什麼?
        [Unknown]: 
      該機關的兩字母國家代碼是什麼
        [Unknown]:  CN
      CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN 正确嗎?
        [否]:  y
       
      輸入<jetty>的主密碼
              (如果和 keystore 密碼相同,按回車): hadoop
      再次輸入新密碼:
      完成上述工作後,将在目前目錄生成 keystore 證書檔案,将keystore 考貝到 azkaban webserver 伺服器根目錄中.
      
      執行拷貝指令:
      cp keystore /opt/bigdata/azkaban/server/
                 
    • 4.5 配置時區
    1、先生成時區配置檔案Asia/Shanghai,用互動式指令 tzselect 即可
      選5 --->選9---->選1----->選1
    
    
    2、拷貝該時區檔案,覆寫系統本地時區配置
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime  
               
  • 4.6 修改配置檔案
    • vim /opt/bigdata/azkaban/server/conf/azkaban.properties
#内容說明如下:
#Azkaban Personalization Settings
azkaban.name=Test                   #伺服器UI名稱,用于伺服器上方顯示的名字
azkaban.label=My Local Azkaban      #描述
azkaban.color=#FF3601               #UI顔色
azkaban.default.servlet.path=/index    
web.resource.dir=web/                 #預設根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    #global配置檔案所在位置
azkaban.project.dir=projects                                             
 
database.type=mysql               #資料庫類型
mysql.port=3306                   #端口号
mysql.host=node1                  #資料庫連接配接IP
mysql.database=azkaban            #資料庫執行個體名
mysql.user=root                   #資料庫使用者名
mysql.password=123456             #資料庫密碼
 
# Velocity dev mode
velocity.dev.mode=false          #Jetty伺服器屬性.
jetty.maxThreads=25              #最大線程數
jetty.ssl.port=8443              #Jetty SSL端口
jetty.port=8081                  #Jetty端口
jetty.keystore=keystore          #SSL檔案名
jetty.password=123456            #SSL文   件密碼
jetty.keypassword=123456         #Jetty主密碼 與 keystore檔案相同
jetty.truststore=keystore        #SSL檔案名
jetty.trustpassword=123456       #SSL檔案密碼
 
# 執行伺服器屬性
executor.port=12321               #執行伺服器端口
 
# 郵件設定
[email protected]      #發送郵箱
mail.host=smtp.163.com            #發送郵箱smtp位址
mail.user=xxxxxxxx                #發送郵件時顯示的名稱
mail.password=**********          #郵箱密碼
[email protected]   #任務失敗時發送郵件的位址
[email protected]   #任務成功時發送郵件的位址
lockdown.create.projects=false       
cache.directory=cache                #緩存目錄


#郵箱用于後期跑任務如果失敗了可以用來通知使用者

           
  • 4.7 修改配置檔案使用者配置
    • vim /opt/bigdata/azkaban/server/conf/azkaban-users.xml
      • 添加管理者使用者
<azkaban-users>
<user username="azkaban" password="azkaban" roles="admin"groups="azkaban"/>
<user username="metrics" password="metrics" roles="metrics"/>
 <!--新增admin使用者--> 
<user username="admin" password="admin" roles="admin,metrics" />
<role name="admin" permissions="ADMIN" />
<role name="metrics" permissions="METRICS"/>
</azkaban-users>

           
  • 5、azkaban 執行服器安裝
    • 1、解壓azkaban-executor-server-2.5.0.tar.gz
    tar -zxvf azkaban-executor-server-2.5.0.tar.gz -C /opt/bigdata/azkaban
    
               
    • 2、重命名解壓目錄
    mv /opt/bigdata/azkaban/azkaban-executor-2.5.0 /opt/bigdata/azkaban/executor
    
               
    • 3、修改配置檔案
      • vim /opt/bigdata/azkaban/executor/conf/azkaban.properties
    #Azkaban   #時區
    default.timezone.id=Asia/Shanghai          
     
    #資料庫設定----->需要修改的資訊
    mysql.host=node4          #資料庫IP位址
    mysql.database=azkaban    #資料庫執行個體名
    mysql.user=root           #資料庫使用者名
    mysql.password=!Qaz123456     #資料庫密碼
    
               
  • 6、azkaban腳本導入
    • 解壓azkaban-sql-script-2.5.0.tar.gz
    tar -zxvf azkaban-sql-script-2.5.0.tar.gz -C /opt/bigdata/azkaban
    
               
    • 把解壓後的腳本導入到mysql中
    --進入到mysql
    mysql> create database azkaban;
    mysql> use azkaban;
    mysql> source /opt/bigdata/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql;
    
    
    建立azkaban資料庫用于儲存我們的工作資訊
    
               

6. Azkaban啟動

6.1 啟動web server服務

  • 在azkaban web server伺服器目錄下執行啟動指令
bin/azkaban-web-start.sh

           
  • ps:在web server伺服器根目錄運作

6.2 啟動executor執行服務

  • 在azkaban executor伺服器目錄下執行啟動指令
bin/azkaban-executor-start.sh

           
  • ps:在executor伺服器根目錄運作
  • 啟動完成後,在浏覽器(建議使用谷歌浏覽器)中輸入https://伺服器IP位址:8443 ,即可通路azkaban服務了.在登入中輸入剛才新的戶用名及密碼,點選 login.
    • 輸入“IP位址:8443”無法通路 web 頁面, 且背景報錯,原因是浏覽器安全證書限制
      • 解決辦法:使用“https://ip:8443”通路, 發現已經可以通路了, 背景會報證數問題的錯誤, 忽略即可, 不影響使用, 選擇進階 ------> 繼續通路該網站
azkaban工作流排程器Azkaban工作流排程器
(1)、projects:azkaban最重要的一部分,建立一個工程,将所有的工作流放在工程中執行
(2)、scheduling:定時排程任務用的
(3)、executing:  顯示目前運作的任務
(4)、History : 顯示曆史運作任務

一個project由3個按鈕:
(1)、Flows:一個工作流,由多個job組成
(2)、Permissions:權限管理
(3)、Project Logs:工程日志資訊

           

7. Azkaban實戰

7.1 command類型單一job

  • 1、建立job描述檔案 以.job字尾結尾
    • 建立 command.job 檔案
#command.job
type=command
command=echo 'hello azkaban......'

           
  • 2、将job資源檔案打包成zip檔案
    • 例如
      • command.zip
  • 3、通過azkaban的web管理平台建立project并上傳job壓縮包
azkaban工作流排程器Azkaban工作流排程器
  • 3、點選運作
azkaban工作流排程器Azkaban工作流排程器
  • 4、運作完成
azkaban工作流排程器Azkaban工作流排程器

7.2 command類型多job工作流

  • 1、建立有依賴關系的多個job描述
    • 第一個job:start1.job
    #start1.job
    type=command
    command= echo 'start1...start1...'
    
               
    • 第二個job:start2.job 它依賴start1.job
    #start2.job
    type=command
    dependencies=start1
    command= echo 'start2...start2...'
    
               
  • 2、将job資源檔案打包成zip檔案
    • start12.zip
azkaban工作流排程器Azkaban工作流排程器
  • 3、建立工程,上傳zip包,最後啟動工作流
    azkaban工作流排程器Azkaban工作流排程器
  • 補充
    • 如果一個job有多個依賴的job,可以使用逗号隔開
例如: 
#start1.job
type=command
command= echo "start1 job"

#start2.job
type=command
command= echo "start2 job"

#stop.job
type=command
denpendencies=start1,start2
command=echo "stop job"

注意:有多個依賴的job,用逗号隔開

           

7.3 HDFS操作任務

  • 1、建立job描述檔案
    • vim fs.job
    #fs.job
    type=command
    command=echo "start execute"
    command.1=/opt/bigdata/hadoop/bin/hdfs dfs -mkdir /azkaban
    command.2=/opt/bigdata/hadoop/bin/hdfs dfs -put /home/hadoop/source.txt /azkaban
    
               
  • 2、将job資源檔案打包成zip檔案
    • fs.zip
  • 3、建立工程,上傳zip包,最後啟動工作流
azkaban工作流排程器Azkaban工作流排程器

7.4 MAPREDUCE任務

  • MR任務依然可以使用command的job類型來執行
  • 1、建立job描述檔案,及mr程式jar包
    • 示例中直接使用hadoop自帶的example jar
    #mr.job
    type=command
    command=/opt/bigdata/hadoop/bin/hadoop  jar hadoop-mapreduce-examples-2.7.3.jar wordcount /wordcount/in /wordcount/out
    
               
  • 2、将job資源檔案打包成zip檔案
    • mr.zip
  • 3、建立工程,上傳zip包,最後啟動工作流
    azkaban工作流排程器Azkaban工作流排程器

7.5 HIVE腳本任務

  • 1、 建立job描述檔案和hive腳本
    • Hive腳本: test.sql
    use default;
    create table if not exists test_azkaban(id int,name string,address string) row format delimited fields terminated by ',';
    load data local inpath '/home/hadoop/azkaban/test.txt' into table test_azkaban;
    create table if not exists countaddress as select address,count(*) as num from test_azkaban group by address ;
    
    insert overwrite local directory '/home/hadoop/azkaban/out' select * from countaddress; 
    
               
    • 準備資料
      • /home/hadoop/azkaban/test.txt
      1,zhangsan,shanghai
      2,lisi,beijing
      3,xiaoming,shanghai
      4,xiaozhang,shanghai
      5,xiaogang,beijing
      
                 
  • 2、建立job描述檔案
    • hive.job
    # hive.job
    type=command
    command=/opt/bigdata/hive/bin/hive -f 'test.sql'
    
               
  • 3、将job資源檔案打包成zip檔案
    • hive.zip
      azkaban工作流排程器Azkaban工作流排程器
  • 4、建立工程,上傳zip包,最後啟動工作流
    azkaban工作流排程器Azkaban工作流排程器

五、拓展點、未來計劃、行業趨勢

8. 任務定時排程

  • 在啟動工作流的時候,可以點選Schedule,實作定時排程一個工作流
azkaban工作流排程器Azkaban工作流排程器
azkaban工作流排程器Azkaban工作流排程器

六、總結

七、作業

八、互動問答

九、題庫 - 本堂課知識點