Azkaban 工作流調度器
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=cacheazkaban.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/jobtypesazkaban.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 工作流調度器