一、azkaban介紹
Azkaban是由Linkedin開源的一個(gè)批處理工作流任務(wù)調(diào)度器。用于在一個(gè)工作流內(nèi)以一個(gè)特定的順序運(yùn)行一組工作和流程。Azkaban定義了一種KV文件格式來建立任務(wù)之間的依賴關(guān)系,并提供一個(gè)易于使用的web用戶界面維護(hù)和跟蹤你的工作流。它的功能主要有以下特點(diǎn):
1、web用戶界面
2、方便上傳工作流
3、方便設(shè)置任務(wù)之間的關(guān)系
4、調(diào)度工作流
5、認(rèn)證/授權(quán)(權(quán)限的工作)
6、能夠殺死并重新啟動(dòng)工作流
7、模塊化和可插拔的插件機(jī)制
8、項(xiàng)目工作區(qū)
9、工作流和任務(wù)的日志記錄和審計(jì)
二、azkaban安裝部署
2.1安裝前的準(zhǔn)備:
2.1.1、安裝需要的軟件我已經(jīng)上傳到github(https://github.com/QiGuaiJun625/Azkaban),有興趣的可以copy或者單獨(dú)下也可以(先下載前三個(gè)文件即可,后面兩個(gè)文件是出錯(cuò)時(shí)有可能需要的,2.5版本以后的版本自帶mysql連接jar包,最后一個(gè)文件應(yīng)該是用不到)。
2.1.2、目前azkaban只支持mysql,需要在服務(wù)器上安裝mysql,并建立用戶和密碼,我的賬號(hào)是root,密碼是123456。
2.2 安裝azkaban
2.2.1、在服務(wù)器中創(chuàng)建azkaban目錄
2.2.2、將安裝包上傳到azkaban目錄中,進(jìn)行解壓
tar -zxvf azkaban-sql-script-2.5.0.tar.gz
tar -zxvf?azkaban-executor-server-2.5.0.tar.gz
tar -zxvf?azkaban-web-server-2.5.0.tar.gz
2.2.3、為了后續(xù)操作簡(jiǎn)單,解壓后的文件重新命名
mv azkaban-web-2.5.0 server
mv azkaban-executor-2.5.0 executor
2.2.4、azkaban腳本導(dǎo)入
進(jìn)入mysql,創(chuàng)建azkaban數(shù)據(jù)庫,并將解壓的腳本導(dǎo)入到azkaban數(shù)據(jù)庫。
完成腳本導(dǎo)入后,會(huì)發(fā)現(xiàn)azkaban中導(dǎo)入如下數(shù)據(jù)表:
2.3 創(chuàng)建SSL配置
1、生成keystore的密碼及相應(yīng)信息
輸入keystore密碼:
再次輸入新密碼:
您的名字與姓氏是什么?
? [Unknown]:
您的組織單位名稱是什么?
? [Unknown]:
您的組織名稱是什么?
? [Unknown]:
您所在的城市或區(qū)域名稱是什么?
? [Unknown]:
您所在的州或省份名稱是什么?
? [Unknown]:
該單位的兩字母國家代碼是什么
? [Unknown]:CN
CN=Unknown,
OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN?正確嗎?
? [否]:y
輸入<jetty>的主密碼
????????(如果和?keystore?密碼相同,按回車):
再次輸入新密碼:
為了方便我把所有的密碼都設(shè)置成了123456
2、將keystore拷貝到azkaban web服務(wù)器根目錄中:
2.4 時(shí)間同步配置
先配置好服務(wù)器節(jié)點(diǎn)上的時(shí)區(qū)
1、如果在/uer/share/zoneinfo這個(gè)目錄下存在時(shí)區(qū)配置文件Asia/Shanghai,則不用配置時(shí)間同步,如果沒有,就要tzselect生成。
[root@master]$ tzselect
Please identify alocation so that time zone rules can be set correctly.
Please select acontinent 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 wantto specify the time zone using the Posix TZ format.
#? 5
Please select acountry.
?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 oneof the following time zone regions.
1) Beijing Time
2) Xinjiang Time
#? 1
The followinginformation has been given:
?????? China
?????? Beijing Time
ThereforeTZ='Asia/Shanghai' will be used.
Local time is now: Wed Jun 14 09:16:46 CST 2017.
Universal Time isnow:?????? Wed Jun 14 01:16:46 UTC 2017.
Is the aboveinformation OK?
1) Yes
2) No
#?1
2、拷貝該時(shí)區(qū)文件,覆蓋系統(tǒng)本地時(shí)區(qū)配置
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
3、集群時(shí)間同步
sudo date -s ‘2019-05-14 22:57:45’(舉例,按你當(dāng)時(shí)的時(shí)間來)
hwclock -w
2.5 配置文件
2.5.1 web服務(wù)器配置
1、進(jìn)入azkaban web服務(wù)器安裝目錄conf目錄,打開azkaban.properties文件
2、按照如下配置修改azkaban.properties文件
#Azkaban Personalization Settings
azkaban.name=Test? ? ? ? ? ? ? ? ? ? ? ? ? ? #服務(wù)器UI名稱,用于服務(wù)器上方顯示的名字(可以自己設(shè)置)
azkaban.label=My Local
Azkaban? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #描述
azkaban.color=#FF3601??????????????????????????????????????????#UI顏色
azkaban.default.servlet.path=/index????????????????????????#
web.resource.dir=web/? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #默認(rèn)根web目錄
default.timezone.id=Asia/Shanghai?????????????????????????#默認(rèn)時(shí)區(qū),已改為亞洲/上海?默認(rèn)為美國
#Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager? #用戶權(quán)限管理默認(rèn)類
user.manager.xml.file=/root/azkaban/server/conf/azkaban-users.xml? ?#用戶配置(最好寫成絕對(duì)地址)
#Loader for projects
executor.global.properties=conf/global.properties? ?# global配置文件所在位置
azkaban.project.dir=projects???????????????????????????????????????????????#
database.type=mysql???????????????????????????????????????????????????????????#數(shù)據(jù)庫類型
mysql.port=3306??????????????????????????????????????????????????????????????????#端口號(hào)
mysql.host=root? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#數(shù)據(jù)庫連接IP
mysql.database=azkaban? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #數(shù)據(jù)庫實(shí)例名
mysql.user=root? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#數(shù)據(jù)庫用戶名
mysql.password=123456? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #數(shù)據(jù)庫密碼
mysql.numconnections=100?????????????????????????????????????????????????#最大連接數(shù)
# Velocity dev mode
velocity.dev.mode=false? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
# Jetty服務(wù)器屬性.
jetty.maxThreads=25? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #最大線程數(shù)
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文件密碼
#?執(zhí)行服務(wù)器屬性
executor.port=12321? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #執(zhí)行服務(wù)器端口
#郵件設(shè)置
mail.sender=xxxxxxxx@163.com? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#發(fā)送郵箱?
mail.host=smtp.163.com? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#發(fā)送郵箱smtp地址
mail.user=xxxxxxxx? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #發(fā)送郵件時(shí)顯示的名稱
mail.password=**********????????????????????????????????????????????????#郵箱密碼
job.failure.email=xxxxxxxx@163.com? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#任務(wù)失敗時(shí)發(fā)送郵件的地址
job.success.email=xxxxxxxx@163.com? ? ? ? ? ? ? ? ? ? ? ? ? ?#任務(wù)成功時(shí)發(fā)送郵件的地址
lockdown.create.projects=false??????????????????????????????????????????#
cache.directory=cache? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#緩存目錄
3、web服務(wù)器用戶配置
在azkaban web服務(wù)器安裝目錄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.5.2 執(zhí)行服務(wù)器配置
1、進(jìn)入執(zhí)行服務(wù)器安裝目錄conf下,打開azkaban.properties
2、編輯azkaban.properties文件
#Azkaban
default.timezone.id=Asia/Shanghai? ? ? ? ? ? ? ? ? ? ? ? ? ?#時(shí)區(qū)
# Azkaban JobTypes?插件配置
azkaban.jobtype.plugin.dir=plugins/jobtypes?? ?#jobtype插件所在位置
#Loader for projects
executor.global.properties=conf/global.properties
azkaban.project.dir=projects
#數(shù)據(jù)庫設(shè)置
database.type=mysql? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #數(shù)據(jù)庫類型(目前只支持mysql)
mysql.port=3306? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#數(shù)據(jù)庫端口號(hào)
mysql.host=localhost? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #數(shù)據(jù)庫IP地址
mysql.database=azkaban? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #數(shù)據(jù)庫實(shí)例名
mysql.user=root? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#數(shù)據(jù)庫用戶名
mysql.password=123456? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #數(shù)據(jù)庫密碼
mysql.numconnections=100? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#最大連接數(shù)
#?執(zhí)行服務(wù)器配置
executor.maxThreads=50? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #最大線程數(shù)
executor.port=12321? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#端口號(hào)(如修改,請(qǐng)與web服務(wù)中一致)
executor.flow.threads=30? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #線程數(shù)
2.6 啟動(dòng)web服務(wù)器
在azkaban web服務(wù)器目錄下執(zhí)行啟動(dòng)命令
2.7 啟動(dòng)執(zhí)行服務(wù)器
在執(zhí)行服務(wù)器目錄下執(zhí)行啟動(dòng)命令
啟動(dòng)完成后,在瀏覽器(建議使用谷歌瀏覽器)中輸入https://服務(wù)器IP地址:8443,即可訪問azkaban服務(wù)了。在登錄中輸入剛才新的戶用名及密碼(默認(rèn)用戶名和密碼都是azkaban),點(diǎn)擊?login。
到這里我們的azkaban就安裝完成了,安裝的過程有可能會(huì)發(fā)現(xiàn)問題,我列出一些常見的問題,希望有幫助。
三、安裝過程有可能出現(xiàn)的問題
問題1、啟動(dòng)azkaban時(shí)出現(xiàn)user xml file conf/azkaban-users.xml doesn't exit
這個(gè)問題我們?cè)诎惭b的時(shí)候已經(jīng)提出來,就是在2.5.1步驟中配置/root/azkaban/server/conf目錄下的azkaban.properties文件,將azkaban-users.xml路徑改成絕對(duì)路徑
接著再重新啟動(dòng)一下試試。
問題2、啟動(dòng)azkaban出現(xiàn)錯(cuò)誤:Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class org.apache.derby.jdbc.AutoloadedDriver40
這個(gè)問題是“NoClassDefFoundError”是啟動(dòng)azkaban時(shí)并沒有找到類;“Could not initialize class org.apache.derby.jdbc.AutoloadedDriver40” 時(shí)azkaban的server和executor中缺少一個(gè)叫derby.jar的包,我在github上第四個(gè)文件就是下載的derby的一個(gè)jar包,解壓出來找到derby.jar,然后上傳到/root/azkaban/server/lib和/root/azkaban/executor/lib目錄中,然后重新啟動(dòng)試試。
問題3、啟動(dòng)時(shí)azkaban 提交 job報(bào)錯(cuò):Error submitting flow command. org.apache.http.conn.HttpHostConnectException: Connection to http://localhost:12321 refused
導(dǎo)致的這個(gè)問題的原因可能是123321端口已經(jīng)開啟,產(chǎn)生了沖突
解決辦法:
排查 azkaban 執(zhí)行服務(wù)器有沒有啟動(dòng)。使用 jps 命令查看:
AzkabanExecutorServer
AzkabanWebServer
四、azkaban實(shí)戰(zhàn)
Azkaban內(nèi)置的任務(wù)類型支持command、java
1、command類型之單一job案例
a、創(chuàng)建job描述文件(文件類型一定是.job格式)
b、將job資源文件打包成zip文件
c、通過azkaban的web管理平臺(tái)創(chuàng)建project并上傳job壓縮包
首先創(chuàng)建project
d、啟動(dòng)執(zhí)行該job
綠色:執(zhí)行成功
藍(lán)色:正在執(zhí)行
紅色:執(zhí)行失敗
這里是綠色說明執(zhí)行成功。這里特別注意一下:command.job如果是windows系統(tǒng)下創(chuàng)建的可能會(huì)報(bào)錯(cuò),這時(shí)候盡量是在linux系統(tǒng)下(比如服務(wù)器)創(chuàng)建該文件然后編輯打包上傳。
2、command類型之多job工作流案例
2.1 創(chuàng)建有依賴關(guān)系的多個(gè)job描述
第一個(gè)job:master.job
第二個(gè)job:slave.job
2.2 將所有job資源文件打到一個(gè)zip包中
2.3 創(chuàng)建工程
2.4 在azkaban的web管理界面創(chuàng)建工程并上傳zip包
2.5 啟動(dòng)工作流并查看結(jié)果
3、HDFS操作任務(wù)
a、創(chuàng)建job描述文件
b、將job資源文件打包成zip文件
c、通過azkaban的web管理平臺(tái)創(chuàng)建project并上傳job壓縮包
d、啟動(dòng)執(zhí)行該job
e、查看結(jié)果
hadoop上已經(jīng)創(chuàng)建azkaban文件夾
4、MapReduce任務(wù)
在做這個(gè)任務(wù)之前我們進(jìn)行一些準(zhǔn)備工作
首先是在hadoop創(chuàng)建文件夾,在
編輯一個(gè)hello.txt,里面的內(nèi)容可以隨便寫,主要是用來測(cè)試
將編輯好的文本上傳到創(chuàng)建的文件夾下
a、創(chuàng)建job描述文件,及mr程序jar包(示例中直接使用hadoop自帶的example.jar)
b、將所有job資源文件打到一個(gè)zip包中
c、在azkaban的web管理界面創(chuàng)建工程并上傳zip包
d、啟動(dòng)job,并查看結(jié)果
5、HIVE腳本任務(wù)
5.1、創(chuàng)建job描述文件和hive腳本
a、hive腳本:test.sql
b、job描述文件 hive.job
c、我們?cè)赼.txt中創(chuàng)建一些數(shù)據(jù)
d、將所有資源文件打包到一個(gè)zip包中
e、在azkaban的web管理界面創(chuàng)建工程并上傳zip包
f、啟動(dòng)job并查看結(jié)果
說明數(shù)據(jù)庫寫入成功,到這里azkaban就講完了,有什么問題可以私信我。