1. 程式人生 > >Azkaban簡介和使用

Azkaban簡介和使用

概述

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

l 一個完整的資料分析系統通常都是由大量任務單元組成:

shell指令碼程式,java程式,mapreduce程式、hive指令碼等

l 各任務單元之間存在時間先後及前後依賴關係

l 為了很好地組織起這樣的複雜執行計劃,需要一個工作流排程系統來排程執行;

例如,我們可能有這樣一個需求,某個業務系統每天產生20G原始資料,我們每天都要對其進行處理,處理步驟如下所示:

1、  通過Hadoop先將原始資料同步到HDFS上;

2、  藉助MapReduce計算框架對原始資料進行轉換,生成的資料以分割槽表的形式儲存到多張Hive表中;

3、  需要對Hive中多個表的資料進行JOIN處理,得到一個明細資料Hive大表;

4、  將明細資料進行復雜的統計分析,得到結果報表資訊;

5、  需要將統計分析得到的結果資料同步到業務系統中,供業務呼叫使用。

 工作流排程實現方式

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

複雜的任務排程:開發排程平臺

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

 常見工作流排程系統

市面上目前有許多工作流排程器

在hadoop領域,常見的工作流排程器有Oozie, Azkaban,Cascading,Hamake等

 各種排程工具特性對比

下面的表格對上述四種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

Azkaban與Oozie對比

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

詳情如下:

u 功能

兩者均可以排程mapreduce,pig,java,指令碼工作流任務

兩者均可以定時執行工作流任務

u 工作流定義

Azkaban使用Properties檔案定義工作流

Oozie使用XML檔案定義工作流

u 工作流傳參

Azkaban支援直接傳參,例如${input}

Oozie支援引數和EL表示式,例如${fs:dirSize(myInputDir)}

u 定時執行

Azkaban的定時執行任務是基於時間的

Oozie的定時執行任務基於時間和輸入資料

u 資源管理

Azkaban有較嚴格的許可權控制,如使用者對工作流進行讀/寫/執行等操作

Oozie暫無嚴格的許可權控制

u 工作流執行

Azkaban有兩種執行模式,分別是soloserver mode(executor server和web server部署在同一臺節點)和multi server mode(executor server和web server可以部署在不同節點)

Oozie作為工作流伺服器執行,支援多使用者和多工作流

u 工作流管理

Azkaban支援瀏覽器以及ajax方式操作工作流

Oozie支援命令列、HTTP REST、Java API、瀏覽器操作工作流

Azkaban介紹

Azkaban是由Linkedin開源的一個批量工作流任務排程器。用於在一個工作流內以一個特定的順序執行一組工作和流程。Azkaban定義了一種KV檔案格式來建立任務之間的依賴關係,並提供一個易於使用的web使用者介面維護和跟蹤你的工作流。

它有如下功能特點:

²  Web使用者介面

²  方便上傳工作流

²  方便設定任務之間的關係

²  排程工作流

²  認證/授權(許可權的工作)

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

²  模組化和可插拔的外掛機制

²  專案工作區

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

Azkaban安裝部署

準備工作

Azkaban Web伺服器

azkaban-web-server-2.5.0.tar.gz

Azkaban執行伺服器 

azkaban-executor-server-2.5.0.tar.gz

MySQL

目前azkaban只支援 mysql,需安裝mysql伺服器,本文件中預設已安裝好mysql伺服器,並建立了 root使用者,密碼 root.

下載地址:http://azkaban.github.io/downloads.html

安裝

將安裝檔案上傳到叢集,最好上傳到安裝 hive、sqoop的機器上,方便命令的執行

在當前使用者目錄下新建 azkabantools目錄,用於存放源安裝檔案.新建azkaban目錄,用於存放azkaban執行程式

azkaban web伺服器安裝

解壓azkaban-web-server-2.5.0.tar.gz

命令: tar –zxvf azkaban-web-server-2.5.0.tar.gz

將解壓後的azkaban-web-server-2.5.0 移動到 azkaban目錄中,並重新命名 webserver

命令: mv azkaban-web-server-2.5.0 ../azkaban

       cd ../azkaban

       mv azkaban-web-server-2.5.0  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 移動到 azkaban目錄中,並重新命名 executor

命令:mv azkaban-executor-server-2.5.0  ../azkaban

cd ../azkaban

mv azkaban-executor-server-2.5.0  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/home/hadoop/azkaban-2.5.0/create-all-sql-2.5.0.sql;

建立SSL配置

參考地址: http://docs.codehaus.org/display/JETTY/How+to+configure+SSL

命令: keytool -keystore keystore -alias jetty -genkey -keyalg RSA

執行此命令後,會提示輸入當前生成 keystor的密碼及相應資訊,輸入的密碼請勞記,資訊如下:

輸入keystore密碼: 

再次輸入新密碼:

您的名字與姓氏是什麼?

  [Unknown]: 

您的組織單位名稱是什麼?

  [Unknown]: 

您的組織名稱是什麼?

  [Unknown]: 

您所在的城市或區域名稱是什麼?

  [Unknown]: 

您所在的州或省份名稱是什麼?

  [Unknown]: 

該單位的兩字母國家程式碼是什麼

  [Unknown]:  CN

CN=Unknown, OU=Unknown, O=Unknown,L=Unknown, ST=Unknown, C=CN 正確嗎?

  [否]:  y

輸入<jetty>的主密碼

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

再次輸入新密碼:

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

配置檔案

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

1、先生成時區配置檔案Asia/Shanghai,用互動式命令 tzselect 即可

2、拷貝該時區檔案,覆蓋系統本地時區配置

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

azkaban web伺服器配置

進入azkaban web伺服器安裝目錄 conf目錄

v  修改azkaban.properties檔案

命令vi 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=localhost                                                      #資料庫連線IP

mysql.database=azkaban                                                       #資料庫例項名

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

mysql.password=root                                                          #資料庫密碼

mysql.numconnections=100                                                  #最大連線數

# 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                                                            #快取目錄

v  azkaban 執行伺服器executor配置

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

vi azkaban.properties

#Azkaban

default.timezone.id=Asia/Shanghai                                              #時區

# Azkaban JobTypes 外掛配置

azkaban.jobtype.plugin.dir=plugins/jobtypes                   #jobtype 外掛所在位置

#Loader for projects

executor.global.properties=conf/global.properties

azkaban.project.dir=projects

#資料庫設定

database.type=mysql                                                                       #資料庫型別(目前只支援mysql)

mysql.port=3306                                                                                #資料庫埠號

mysql.host=192.168.20.200                                                           #資料庫IP地址

mysql.database=azkaban                                                                #資料庫例項名

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

mysql.password=root                                  #資料庫密碼

mysql.numconnections=100                                                           #最大連線數

# 執行伺服器配置

executor.maxThreads=50                                                                #最大執行緒數

executor.port=12321                                                               #埠號(如修改,請與web服務中一致)

executor.flow.threads=30                                                                #執行緒數

v  使用者配置

進入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.

Azkaban實戰

Azkaba內建的任務型別支援command、java

Command型別單一job示例

1、建立job描述檔案

vi command.job

#command.job

type=command                                                   

command=echo 'hello'

2、將job資原始檔打包成zip檔案

zip command.job

3、通過azkaban的web管理平臺建立project並上傳job壓縮包

首先建立project

上傳zip包

4、啟動執行該job

 

Command型別多job工作流flow

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、在azkaban的web管理介面建立工程並上傳zip包

4、啟動工作流flow

HDFS操作任務

1、建立job描述檔案

# fs.job

type=command

command=/home/hadoop/apps/hadoop-2.6.1/bin/hadoop fs -mkdir /azaz

2、將job資原始檔打包成zip檔案

3、通過azkaban的web管理平臺建立project並上傳job壓縮包

4、啟動執行該job

MAPREDUCE任務

Mr任務依然可以使用command的job型別來執行

1、建立job描述檔案,及mr程式jar包(示例中直接使用hadoop自帶的examplejar)

# 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

2、將所有job資原始檔打到一個zip包中

 

3、在azkaban的web管理介面建立工程並上傳zip包

4、啟動job

HIVE指令碼任務

l  建立job描述檔案和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'

2、將所有job資原始檔打到一個zip包中

3、在azkaban的web管理介面建立工程並上傳zip包

4、啟動job

相關推薦

Azkaban簡介使用

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

工作流排程系統Azkaban簡介使用

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

工作流調度系統Azkaban簡介使用

download 版本 role edi 數據分析 訪問 label rec test 1 概述 1.1 為什麽需要工作流調度系統 l 一個完整的數據分析系統通常都是由大量任務單元組成: shell腳本程序,java程序,mapreduce程序、hive腳本等 l 各任

day1 python簡介入門

back argv 安裝gcc www 導入 urn 16px 利用 表示 Linux的yum依賴自帶Python,為防止錯誤,此處更新其實就是再安裝一個Python: 安裝Python   1、下載安裝包 https://www.python.

KBEngine warring項目源碼閱讀(一) 項目簡介註冊登錄

urn 創建 ges input alt 接下來 F12 .com name 首先介紹下warring項目,是kbe自帶的一個演示示例,大部分人了解kbe引擎也是從warring項目開始的。 項目地址:https://github.com/kbengine/kbengine

Python自學之路【第一篇】:Python簡介入門

youtube 通用 too 互聯網公司 python腳本 bar strong 重裝 排行 Python前世今生 python的創始人為吉多·範羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,吉多·範羅蘇姆為了在阿姆斯特丹打發時間,決心開發一個新的腳本

Rust 1.7.0 匹配器 match 的簡介使用

let 滿足 選擇 多個 efault msg i++ pretty article 使用過正則表達式的人應該都知道 matcher ,通過 matcher 匹配器運算正則表達式,完畢一系列的匹配規則。 在Rust 中 沒有 switch 語句。mat

從零開始玩轉JMX(一)——簡介Standard MBean

pos cor csdn comm art order clas post tex 從零開始玩轉JMX(一)——簡介和Standard MBeanJMX超詳細解讀 參考資料JMX整理JMX簡介http://blog.csdn.net/DryKillLogic/articl

redis學習--簡介安裝

key-value shel 解壓 過去 內存 下載 local 完成 test 1.redis介紹: Redis 與其他 key - value 緩存產品有以下三個特點: Redis支持數據的持久化,可以將內存中的數據保存在磁盤中,重啟的時候可以再次加載進行使用。 Re

Compser簡介初體驗

命令 pos 調用 資源 發郵件 再次 https 分享 images 什麽是composer Composer是PHP依賴管理工具。 依賴:比如運行A需要B,運行B又需要C,我們就說A依賴於B,B依賴於C。 Compoer的由來 PHP之前的類管理: php開發者

(一)Solr——簡介安裝配置

str 服務 開源項目 一個 war prop post 沒有 系統安裝 1. solr簡介 1.1 Solr是什麽 Solr是apache的頂級開源項目,它是使用java開發 ,基於lucene的全文檢索服務器。 Solr和lucene的版本是同步更新的,最新的版本

seaJS簡介完整實例

化工 area 初始化 完成 har 自動 end href out 什麽是 seaJS ?  和requireJS相似的,seaJS 也是用JavaScript編寫的JS框架,主要功能是可以按不同的先後依賴關系對 JavaScript 等文件的進行加載工作,可簡單理解為J

Linux的企業-Cgconfig簡介相關限制

cgconfig 簡介 相關限制 一.簡介 Cgroups是control groups的縮寫,是Linux內核提供的一種可以限制、記錄、隔離進程組(process groups)所使用的物理資源(如:cpu,memory,IO等等)的機制。最初由google的工程師提出,後來被整合進

MyBatis原理簡介小試牛刀

batis dao 讀取 區別 ons 目的 ktr als config 在我看來mybatis的原理與hibernate在某些方面是一致的,先回顧一下Hibernate原理(原理主要上是要掌握並理解下列六個對象: Hibernate中重要的六個對象: Configura

DNS服務簡介配置詳解

dns基本原理 dns簡介 dns服務配置過程 DNS服務簡介和配置詳解1、什麽是DNS? DNS( Domain Name System)是“域名系統”的英文縮寫,是一種組織成域層次結構的計算機和網絡服務命名系統,使用的是UDP協議的53號端口,它用於TCP/IP網絡,它所提供的服務是用來將主機

Python之路【第一篇】:Python簡介入門

源碼 world 網絡服務 換行 編程風格 大小寫 utf8 編譯安裝 比較 python簡介: 一、什麽是python Python(英國發音:/ pa θ n/ 美國發音:/ pa θɑ n/),是一種面向對象、直譯式的計算機程序語言。 每一門語言都有自己的哲學: py

Cgroup blkio簡介測試(使用fio測試)

diff 了解 ont 電梯 iostat tmpfs del let dev Cgroup blkio簡介和測試(使用fio測試) 因需要對docker鏡像內的進程對磁盤讀寫的速度進行限制,研究了下Cgroup blkio,並使用fio對其iops/bps限速進行測試。

各個JSON技術的簡介優劣

pan ns-3 json轉換 出錯 如果 算法 spa 出現問題 項目 各個JSON技術的簡介和優劣 (這裏只介紹各自優點和缺點,具體用法,請大家到網上去查找) 特別是fastJaso用法。這裏介紹的不錯: https://www.cnblog

Elasticsearch簡介安裝對比

特殊 字段 tree apache 查看 端口 blog work 分布式搜索 各位小夥伴,又到了本期分享大數據技術的時間,本次給大夥帶來的是Elasticsearch這個技術,閑話不多聊,我們開始進入正題。 一、什麽是elasticsearch Elasticsearc

linux nftables簡介基礎操作

語法 用戶態 新規 數據包 name chain 地址 lac 版本 一、什麽是nftables? nftables 是新的數據包分類框架,新的linux防火墻管理程序,旨在替代現存的 {ip,ip6,arp,eb}_tables。簡而言之:它在 Linux 內核版本高於