- 一個完整的數據分析系統一般都是由大量任務單元組成:shell 腳本程序,java 程序,mapreduce 程序、hive 腳本等
- 各任務單元之間存在時間前後及先後依賴關係
- 爲了很好地組織起這樣的複雜執行計劃,須要一個工做流調度系統來調度執行 html
在 hadoop 領域,常見的工做流調度器有 Oozie, Azkaban,Cascading,Hamake 等 。
java
目前企業中最流行的兩種調度器是Oozie與Azkaban。總的來講ooize 相比 azkaban 是一個重量級的任務調度系統,功能全面,但配置使用也更復雜。若是能夠不在乎某些功能的缺失,輕量級調度器 azkaban 是很不錯的候選對象。
兩者的區別能夠從如下的幾個方面進行描述:
功能
二者都可以調度 mapreduce,pig,java,腳本工做流任務二者都可以定時執行工做流任務
工做的定義
Azkaban 使用 Properties 文件定義工做流
Oozie 使用 XML 文件定義工做流
工做流傳參
Azkaban 支持直接傳參,例如${input}
Oozie 支持參數和 EL 表達式,例如${fs:dirSize(myInputDir)} strust2(ONGL)
定時執行
Azkaban 的定時執行任務是基於時間的
Oozie 的定時執行任務基於時間和輸入數據
資源管理
Azkaban 有較嚴格的權限控制,如用戶對工做流進行讀/寫/執行等操做
Oozie 暫無嚴格的權限控制
工做流執行
Azkaban 有兩種運行模式,分別是 solo server mode(executor server 和 web server 部署在同一臺節點)和 multi server mode(executor server 和 web server 能夠部署在不一樣節點)
Oozie 做爲工做流服務器運行,支持多用戶和多工做流
工做流管理
Azkaban 支持瀏覽器以及 ajax 方式操做工做流
Oozie 支持命令行、HTTP REST、Java API、瀏覽器操做工做流mysql
Azkaban 是由 Linkedin 開源的一個批量工做流任務調度器。用於在一個工做流內以一個特定的順序運行一組工做和流程。Azkaban 定義了一種 KV 文件(properties)格式來創建任務之間的依賴關係,並提供一個易於使用的 web 用戶界面維護和跟蹤你的工做流。
Azkaban的功能特色git
Azkaban的實戰安裝:
安裝包:
Azkaban Web 服務器:azkaban-web-server-2.5.0.tar.gz
Azkaban Excutor 執行服務器:azkaban-executor-server-2.5.0.tar.gz
Azkaban 初始化腳本文件:azkaban-sql-script-2.5.0.tar.gz
下載地址:http://azkaban.github.io/downloads.html
① 解壓安裝包github
[root@hadoop03 ~]# tar -zxvf azkaban-web-server-2.5.0.tar.gz -C apps/ azkaban/ [root@hadoop03 ~]# tar -zxvf azkaban-executor-server-2.5.0.tar.gz -C apps/ azkaban/ [root@hadoop03 ~]# tar -zxvf azkaban-sql-script-2.5.0.tar.gz -C apps/ azkaban/
②安裝 Azkaban 腳本導入web
[root@hadoop03 ~]# tar -zxvf azkaban-sql-script-2.5.0.tar.gz -C apps/ azkaban/ #進入MySQL執行腳本: mysql> create database azkaban; Query OK, 1 row affected (0.01 sec) mysql> use azkaban; Database changed mysql> source /home/hadoop/apps/azkaban/azkaban-script-2.5.0/create-all-sql-2.5.0.sql;
③建立 SSL 配置ajax
#最好是在azkaban 目錄下: [root@hadoop03 ~]# keytool -keystore keystore -alias jetty -genkey -keyalg RSA
#此命令執行以後會提示輸入當前生成 keystore 的密碼及相應信息,輸入密碼請勞記,信息以下:
而後將在當前目錄生成 keystore 證書文件,將 keystore 拷貝到 azkaban web 服務器根目錄中.如:sql
[root@hadoop03 ~]#cp keystore azkaban/azkaban-web-2.5.0
④修改配置文件shell
#先配置好服務器節點上的時區 先生成時區配置文件 Asia/Shanghai,用交互式命令 tzselect 便可 拷貝該時區文件,覆蓋系統本地時區配置 [hadoop@hadoop03 ~]$ sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #azkaban web 服務器配置進入 azkaban web 服務器安裝目錄 conf 目錄 [hadoop@hadoop03 ~]$ cd apps/azkaban/azkaban-web-2.5.0/conf/
#修改 azkaban.properties 文件數據庫
#用戶配置,具體配置參加下文 #Loader for projects # global 配置文件所在位置 executor.global.properties=/home/hadoop/apps/azkaban/azkaban-executor-2.5.0/conf/global.properties azkaban.project.dir=projects #數據庫類型 database.type=mysql #端口號 mysql.port=3306 #數據庫鏈接 IP mysql.host=hadoop03 #數據庫實例名 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 端口 jetty.ssl.port=8443 #Jetty 端口 jetty.port=8081 #SSL 文件名 jetty.keystore=/home/hadoop/apps/azkaban/azkaban-web-2.5.0/keystore #SSL 文件密碼 jetty.password=hadoop #Jetty 主密碼 與 keystore 文件相同 jetty.keypassword=hadoop #SSL 文件名 jetty.truststore=/home/hadoop/apps/azkaban/azkaban-web-2.5.0/keystore # SSL 文件密碼 jetty.trustpassword=hadoop # 執行服務器屬性 executor.port=12321 #執行服務器端口 # 郵件設置(可選項) mail.sender=xxxxxxxx@163.com #發送郵箱 mail.host=smtp.163.com #發送郵箱 smtp 地址 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 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>
#azkaban 執行服務器 executor 配置,進入執行服務器安裝目錄 conf,修改 azkaban.properties
#Azkaban default.timezone.id=Asia/Shanghai #時區 #Azkaban JobTypes 插件配置,插件所在位置 azkaban.jobtype.plugin.dir=/home/hadoop/apps/azkaban/azkaban-executor-2.5.0/plugins/jobtypes #Loader for projects executor.global.properties=/home/hadoop/apps/azkaban/azkaban-executor-2.5.0/conf/global.properties azkaban.project.dir=projects #數據庫設置 #數據庫類型(目前只支持 mysql) database.type=mysql #數據庫端口號 mysql.port=3306 #數據庫 IP 地址 mysql.host=hadoop03 #數據庫實例名 mysql.database=azkaban #數據庫用 戶名 mysql.user=root #數據庫密碼 mysql.password=root #最大鏈接數 mysql.numconnections=100 #執行服務器配置 #最大線程數 executor.maxThreads=50 #端口號(如修改,請與 web 服務中一致) executor.port=12321 #線程數 executor.flow.threads=30
⑤配置環境變量
[hadoop@hadoop03 ~]$ vim /etc/profile
#/etc/profile export AZKABAN_WEB_HOME=/home/hadoop/apps/azkaban/azkaban-web-2.5.0 export AZKABAN_EXE_HOME=/home/hadoop/apps/azkaban/azkaban-executor-2.5.0 export PATH=$PATH:$AZKABAN_WEB_HOME/bin:$AZKABAN_EXE_HOME/bin
⑥啓動
#啓動 web 服務器
nohup azkaban-web-start.sh 1>/home/hadoop/azwebstd.out 2>/home/hadoop/azweberr.out &
#啓動執行服務器
nohup azkaban-executor-start.sh 1>/home/hadoop/azexstd.out 2>/home/hadoop/azexerr.out &
⑥驗證是否登陸成功
在瀏覽器中輸入:https://hadoop03:8443/
看到以上界面表示安裝成功!!!!
小編這裏建議將Azkaban 的web、executor配置文件,全部的相對路徑都換成絕對路徑,否則常常會報出文件找不到的問題!!!!
緣由是:在azkaban的server和executor中缺乏一個叫derby.jar的包
解決:在已經安裝的JDK中:
cp $JAVA_HOME/db/lib/derby.jar $AZKABAN_WEB_HOME/extlib cp $JAVA_HOME/db/lib/derby.jar $AZKABAN_EXE_HOME/extlib
若是遇到與MySQL的權限問題:
請參考:http://www.javashuo.com/article/p-hgffexae-dd.html 文章。
①建立job :command.job
#command.job type=command command=echo 'hello'
②將 job 資源文件打包
[hadoop hadoop03@~ ]$ zip command.job
③經過 azkaban web 管理平臺建立 project 並上傳壓縮包