Azkaban教程

目錄

一、簡介

二、各種調度工具特性對比

三、安裝配置

四、Azkaban實戰


一、簡介

Azkaban是在LinkedIn上創建的用於運行Hadoop作業的批處理工作流作業調度程序。Azkaban通過工作依賴性解決訂購問題,並提供易於使用的Web用戶界面來維護和跟蹤您的工作流程。Azkaban定義了一種KV文件格式來建立任務之間的依賴關係

爲什麼需要工作流調度?

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

簡單的任務調度:直接使用 linux 的 crontab 來定義。複雜的任務調度:在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是很不錯的候選對象。

三、安裝配置

1、解壓安裝 ,需要依賴mysql建庫數據,儘量在有mysql、hive等機器上安裝

unzip 文件 -d apps/    
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、 創建SSL配置,生成 keystore 的密碼及相應信息    後續配置文件用到

[root@hdp-1 ~]#  keytool -keystore keystore -alias jetty -genkey -keyalg RSA

輸入 keystore 密碼: 
再次輸入新密碼:
您的名字與姓氏是什麼?
  [Unknown]: 
您的組織單位名稱是什麼?
  [Unknown]: 
您的組織名稱是什麼?
  [Unknown]: 
您所在的城市或區域名稱是什麼?
  [Unknown]: 
您所在的州或省份名稱是什麼?
  [Unknown]: 
該單位的兩字母國家代碼是什麼
  [Unknown]:  CN
CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN 正確嗎?
  [否]:  y

輸入<jetty>的主密碼
        (如果和 keystore 密碼相同,按回車): 
再次輸入新密碼:

3、將 keystore 拷貝到 azkaban web 服務器根目錄中

[root@hdp-1 hadoop-2.7.2]$ mv keystore /root/apps/azkaban/azkaban-web-2.5.0

4、時間同步配置
先配置好服務器節點上的時區
1)如果在 /usr/share/zoneinfo/ 這個目錄下不存在時區配置文件 Asia/Shanghai,就要用 tzselect 生成。

[root@hdp-8 azkaban-web-2.5.0]# 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:    Wed Jun 14 09:16:46 CST 2017.
Universal Time is now:    Wed Jun 14 01:16:46 UTC 2017.
Is the above information OK?
1) Yes
2) No
#? 1

2)拷貝該時區文件,覆蓋系統本地時區配置
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

3)集羣時間同步
sudo date -s ‘2017-06-14 09:23:45’
hwclock -w

5、配置文件
1 Web 服務器配置
1)進入 azkaban web 服務器安裝目錄 conf 目錄,打開 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=hdp-8
mysql.database=azkaban
mysql.user=root
mysql.password=lucas
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=lucasma
jetty.keypassword=lucasma
jetty.truststore=keystore
jetty.trustpassword=lucasma

# Azkaban Executor settings
executor.port=12321

# mail settings
[email protected]
mail.host=smtp.163.com 
[email protected]
[email protected]

lockdown.create.projects=false

cache.directory=cache

2)web 服務器用戶配置

在 azkaban web 服務器安裝目錄 conf 目錄,按照如下配置修改 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、 執行服務器配置
1)進入執行服務器安裝目錄 conf,打開 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=hdp-8
mysql.database=azkaban
mysql.user=root
mysql.password=lucas
mysql.numconnections=100

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

3、mysql建庫建表

mysql > CREATE DATABASE azkaban
mysql >use azkaban
mysql >source /root/apps/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql

6、啓動 web 服務器
在azkaban web服務器目錄下執行啓動命令    bin內執行可能會造成ui界面沒有css樣式

 bin/azkaban-web-start.sh 

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

bin/azkaban-executor-start.sh

啓動完成後,在瀏覽器(建議使用谷歌瀏覽器)中輸入:
https://hdp-1:8443,即可訪問 azkaban 服務了。在登錄中輸入剛纔新的戶用名及密碼,點擊 login。

四、Azkaban實戰

1、單一job實戰

  • 創建job描述文件
vim command.job

#command.job
type=command                                                    
command=echo hello!xin

將job文件打包成zip文件 zip command.job,通過azkaban的web管理平臺創建project並上傳job壓縮包,創建project,執行execute

2、多job工作流flow

  • 創建有依賴關係的多個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

3、操作hadoop

  • vim fs.job   顯示hdfs所有文件
# fs.job
type=command
command=hadoop fs -lsr /
  • 操作hive,hive腳本test.sql
use shcool;
drop table IF EXISTS teacher;
create table teacher(id int,name string,age int) row format delimited fields terminated by ',' ;
load data inpath 'file:///root/hiveinput.txt' into table teacher;
select * from aztest;

#job文件hivef.job
# hivef.job
type=command
command=hive -f 'test.sql'
  • MapReduce 任務   將 job 資源和jar包打到一個 zip 包中
type=command
command=/opt/module/hadoop-2.7.2/bin/hadoop jar hadoop-mapreduce-examples-2.7.2.jar wordcount /wordcount/input /wordcount/output

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章