上一節介紹了Flume多個agent鏈接配合使用。本節博主將爲小夥伴們介紹azkaban的相關概念、簡單的安裝使用。因爲azkaban使用新版本太耗時間,須要編譯安裝,因此博主這次就使用編譯好的老版本2.5;等所有教程作完後,博主會將各軟件的最新版本的使用安裝在後面補充章節中推出。html
1、工做流調度器azkabanjava
概述node
1.一、爲何須要工做流調度系統mysql
一個完整的數據分析系統一般都是由大量任務單元組成:shell腳本程序,java程序,mapreduce程序、hive腳本等,各任務單元之間存在時間前後及先後依賴關係,爲了很好地組織起這樣的複雜執行計劃,須要一個工做流調度系統來調度執行;linux
例如,咱們可能有這樣一個需求,某個業務系統天天產生20G原始數據,咱們天天都要對其進行處理,處理步驟以下所示:
一、經過Hadoop先將原始數據同步到HDFS上;
二、藉助MapReduce計算框架對原始數據進行轉換,生成的數據以分區表的形式存儲到多張Hive表中;
三、須要對Hive中多個表的數據進行JOIN處理,獲得一個明細數據Hive大表;
四、將明細數據進行復雜的統計分析,獲得結果報表信息;
五、須要將統計分析獲得的結果數據同步到業務系統中,供業務調用使用。git
1.二、工做流調度實現方式github
簡單的任務調度:直接使用linux的crontab來定義;
複雜的任務調度:開發調度平臺或使用現成的開源調度系統,好比ooize、azkaban等web
1.三、常見工做流調度系統ajax
市面上目前有許多工做流調度器,在hadoop領域,常見的工做流調度器有Oozie, Azkaban,Cascading,Hamake等sql
1.四、各類調度工具特性對比
下面的表格對上述四種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 |
1.五、Azkaban與Oozie對比
對市面上最流行的兩種調度器,給出如下詳細對比,以供技術選型參考。整體來講,ooize相比azkaban是一個重量級的任務調度系統,功能全面,但配置使用也更復雜。若是能夠不在乎某些功能的缺失,輕量級調度器azkaban是很不錯的候選對象。
詳情以下:
功能
二者都可以調度mapreduce,pig,java,腳本工做流任務
二者都可以定時執行工做流任務
工做流定義
Azkaban使用Properties文件定義工做流
Oozie使用XML文件定義工做流
工做流傳參
Azkaban支持直接傳參,例如${input}
Oozie支持參數和EL表達式,例如${fs:dirSize(myInputDir)}
定時執行
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、瀏覽器操做工做流
2、Azkaban介紹
Azkaban是由Linkedin開源的一個批量工做流任務調度器。用於在一個工做流內以一個特定的順序運行一組工做和流程。Azkaban定義了一種KV文件格式來創建任務之間的依賴關係,並提供一個易於使用的web用戶界面維護和跟蹤你的工做流。
它有以下功能特色:
Web用戶界面
方便上傳工做流
方便設置任務之間的關係
調度工做流
認證/受權(權限的工做)
可以殺死並從新啓動工做流
模塊化和可插拔的插件機制
項目工做區
工做流和任務的日誌記錄和審計
Azkaban安裝部署:
(1) 準備工做
Azkaban Web服務器 azkaban-web-server-2.5.0.tar.gz Azkaban執行服務器 azkaban-executor-server-2.5.0.tar.gz MySQL 目前azkaban的2.5版只支持 mysql,需安裝mysql服務器,本文檔中默認已安裝好mysql服務器,並創建了 root用戶,密碼 123. 下載地址:http://azkaban.github.io/downloads.html
(2) 安裝
將安裝文件上傳到集羣,最好上傳到安裝 hive、sqoop的機器上,方便命令的執行,在當前用戶目錄下新建 azkabantools目錄,用於存放源安裝文件.新建azkaban目錄,用於存放azkaban運行程序
azkaban web服務器安裝:
#上傳解壓azkaban-web-server-2.5.0.tar.gz 命令: Alt+p put *.gz mkdir azkaban mv azkaban-* ./azkaban cd azkaban/ tar -zxvf azkaban-web-server-2.5.0.tar.gz #將解壓後的azkaban-web-server-2.5.0從新命名 az-server 命令: mv azkaban-web-2.5.0 az-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從新命名 az-executor 命令: mv azkaban-executor-2.5.0 az-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 /root/azkaban-2.5.0/create-all-sql-2.5.0.sql;
建立SSL配置
[hadoop@centos-aaron-h1 azkaban]$ keytool -keystore keystore -alias jetty -genkey -keyalg RSA 輸入密鑰庫口令: 再次輸入新口令: 您的名字與姓氏是什麼? [Unknown]: aaron 您的組織單位名稱是什麼? [Unknown]: empire 您的組織名稱是什麼? [Unknown]: empire 您所在的城市或區域名稱是什麼? [Unknown]: shanghai 您所在的省/市/自治區名稱是什麼? [Unknown]: shanghai 該單位的雙字母國家/地區代碼是什麼? [Unknown]: cn CN=aaron, OU=empire, O=empire, L=shanghai, ST=shanghai, C=cn是否正確? [否]: y 輸入 <jetty> 的密鑰口令 (若是和密鑰庫口令相同, 按回車):
完成上述工做後,將在當前目錄生成 keystore 證書文件,將keystore 考貝到 azkaban web服務器根目錄中.如:cp keystore az-server
配置文件
注:先配置好服務器節點上的時區
一、先生成時區配置文件Asia/Shanghai,用交互式命令 tzselect 便可
二、拷貝該時區文件,覆蓋系統本地時區配置
sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime sudo date -s '2019-03-07 23:39:46' #將時間寫入硬件,重啓後可也能夠生效 sudo sudo hwclock -w
azkaban web服務器配置
進入azkaban web服務器安裝目錄 conf目錄
修改azkaban.properties文件
命令vi 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=192.168.29.131 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=xxxtking@136.com mail.host=smtp.163.com mail.user=aaron mail.password=xxxx job.failure.email=xxxtking@163.com job.success.email=xxxtking@163.com lockdown.create.projects=false cache.directory=cache
azkaban 執行服務器executor配置
進入執行服務器安裝目錄conf,修改azkaban.properties
vi 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=192.168.29.131 mysql.database=azkaban mysql.user=root mysql.password=123456 mysql.numconnections=100 # Azkaban Executor settings executor.maxThreads=50 executor.port=12321 executor.flow.threads=30
用戶配置
進入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>
在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.
效果以下:
最後寄語,以上是博主本次文章的所有內容,若是你們以爲博主的文章還不錯,請點贊;若是您對博主其它服務器大數據技術或者博主本人感興趣,請關注博主博客,而且歡迎隨時跟博主溝通交流。