1. 程式人生 > >Azkaban 工作流調度器

Azkaban 工作流調度器

.project false reat lose true over nat spa 部署

Azkaban 工作流調度器

1 概述

  1.1 為什麽需要工作流調度系統

    a)一個完整的數據分析系統通常都是由大量任務單元組成,shell腳本程序,java程序,mapreduce程序、hive腳本等。

    b)各任務單元之間存在時間先後及前後依賴關系。

    c)為了很好地組織起這樣的復雜執行計劃,需要一個工作流調度系統來調度執行。

  1.2 工作流調度實現方式

    簡單的任務調度:直接使用linux的crontab來定義;

    復雜的任務調度:開發調度平臺或使用現成的開源調度系統,比如ooize、azkaban等。

  1.3 常見工作流調度系統

    在hadoop領域,常見的工作流調度器有Oozie, Azkaban,Cascading,Hamake等。

  1.4 Azkaban 與 Oozie對比

    對市面上最流行的兩種調度器,給出以下詳細對比,以供技術選型參考。總體來說,ooize相比azkaban是一個重量級的任務調度系統,功能全面,但配置使用也更復雜。如果可以不在意某些功能的缺失,輕量級調度器azkaban是很不錯的候選對象。

2 Azkaban 介紹

  Azkaban是由Linkedin開源的一個批量工作流任務調度器。用於在一個工作流內以一個特定的順序運行一組工作和流程。Azkaban定義了一種KV文件格式來建立任務之間的依賴關系,並提供一個易於使用的web用戶界面維護和跟蹤你的工作流。

  功能特點:

     Web用戶界面

     方便上傳工作流

     方便設置任務之間的關系

    調度工作流

    認證/授權(權限的工作)

    能夠殺死並重新啟動工作流

    模塊化和可插拔的插件機制

    項目工作區

    工作流和任務的日誌記錄和審計

  2.1 Azkaban 安裝部署

    2.1.1 準備工作:

      azkaban-web-server-2.5.0.tar.gz

      azkaban-executor-server-2.5.0.tar.gz

      MYSQL

    2.1.2 安裝

      1)分別解壓webserver和executorServer

      2)創建SSL配置 

     

 keytool -keystore keystore -alias jetty -genkey -keyalg RSA

      3) 在mysql數據庫中創建azkaban庫,執行sql腳本create-all-sql-3.39.0-12-gb44c688.sql(註意:該腳本在db模塊中,要講mysql引擎改為innoDB)

    2.1.3 配置文件:

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

        a) 先生成時區配置文件Asia/Shanghai,用交互式命令 tzselect 即可。

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

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
      2.1.3.2 azkaban web服務器配置

        conf目錄下文件

      技術分享圖片     

技術分享圖片
# 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=localhost
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
mail.sender=xxx@126.com
mail.host=smtp.126.com
# User facing web server configurations used to construct the user facing server URLs. They are useful when there is a reverse proxy between Azkaban web servers and users.
# enduser -> myazkabanhost:443 -> proxy -> localhost:8081
# when this parameters set then these parameters are used to generate email links. 
# if these parameters are not set then jetty.hostname, and jetty.port(if ssl configured jetty.ssl.port) are used.
# azkaban.webserver.external_hostname=myazkabanhost.com
# azkaban.webserver.external_ssl_port=443
# azkaban.webserver.external_port=8081
mail.user=xxxxxxxx
mail.password=**********
job.failure.email=xxxxxxxx@163.com
job.success.email=xxxxxxxx@163.com
lockdown.create.projects=false
cache.directory=cache
azkaban.properties 技術分享圖片
1 <azkaban-users>
2   <user groups="azkaban" password="azkaban" roles="admin" username="azkaban"/>
3   <user password="metrics" roles="metrics" username="metrics"/>
4   <user username="admin" password="admin" roles="admin,metrics" />
5   <role name="admin" permissions="ADMIN"/>
6   <role name="metrics" permissions="METRICS"/>
7 </azkaban-users>
azkaban-users.xml
      2.1.3.3 azkaban 執行器配置
技術分享圖片
# Azkaban Personalization Settings
default.timezone.id=Asia/Shanghai
# Loader for projects
executor.global.properties=conf/global.properties
azkaban.project.dir=projects
# 數據庫配置
database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban
mysql.user=root
mysql.password=123456
mysql.numconnections=100
#執行服務器配置
executor.port=12321
executor.connector.stats=true
executor.maxThreads=50
executor.flow.threads=30
# Azkaban plugin settings
azkaban.jobtype.plugin.dir=plugins/jobtypes
azkaban.properties

    詳細配置請參考:http://azkaban.github.io/azkaban/docs/latest/ (3.0版本編譯完後web和exec中沒有配置文件 需要將solo中的配置文件復制過去)

      2.1.4 啟動

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

        bin/azkaban-web-start.sh

        註:在web服務器根目錄運行

  

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

        bin/azkaban-executor-start.sh

        註:只能要執行服務器根目錄運行

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

3 實戰

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

  3.1 Command類型單一job示例

    a) 創建job描述文件

      vi command.job      

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

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

zip command.job

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

    首先創建project

    技術分享圖片

    上傳zip

    技術分享圖片

    d)啟動執行該job

   技術分享圖片

  3.2 Command類型多job工作流flow

    a)創建有依賴關系的多個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

    b)將所有job打成一個zip包

    技術分享圖片

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

    d)啟動工作流flow

  3.3 HDFS操作任務

# fs.job
type=command
command=/home/hadoop/apps/hadoop-2.6.1/bin/hadoop fs -mkdir /azaz

  3.4 MapReduce任務

# mrwc.job
type=command
command=/home/hadoop/apps/hadoop-2.6.1/bin/hadoop  jar hadoop-mapreduce-examples-2.6.1.jar wordcount /wordcount/input /wordcount/azout

   將所有資源打包成zip

  技術分享圖片

  3.5 HIVE腳本任務

    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; 

    Job描述文件:hivef.job

# hivef.job
type=command
command=/home/hadoop/apps/hive/bin/hive -f ‘test.sql‘

 

Azkaban 工作流調度器