初識Azkaban


先說下hadoop 內置工作流的不足

(1)支持job單一

(2)硬編碼

(3)無可視化

(4)無調度機制

(5)無容錯機制

在這種情況下Azkaban就出現了

1)Azkaban是什么

Azkaban是由Linkedin開源的一個批量工作流任務調度器。用於在一個工作流內以一個特定的順序運行一組工作和流程。Azkaban定義了一種KV文件格式來建立任務之間的依賴關系,並提供一個易於使用的web用戶界面維護和跟蹤你的工作流。

2)Azkaban的功能特點

①Web用戶界面

②方便上傳工作流

③方便設置任務之間的關系

④工作流調度

⑤認證/授權

⑥能夠殺死並重新啟動工作流

⑦模塊化和可插拔的插件機制

⑧項目工作區

⑨工作流和任務的日志記錄和審計

3)Azkaban的架構

MySQL實例 – Azkaban使用MySQL來存儲項目和執行

Azkaban Web服務器 – Azkaban使用Jetty作為Web服務器,用作控制器以及提供Web界面

Azkaban執行服務器 – Azkaban執行服務器執行提交工作流

4)Azkaban三種運行模式

①solo server mode

H2

web server和executor server運行在一個進程里

②two server mode

MySQL(主從結構)

web server和executor server運行在不同的進程

③multiple executor mode

MySQL(主從結構)

web server和executor server運行在不同的進程 

executor server有多個

Azkaban 安裝部署

系統時區配置

1.查看時區
[xxx@single azkaban-web-2.5.0]$ more /etc/sysconfig/clock ZONE="Asia/Shanghai" UTC=true ARC=false
2.修改時區 時區文件都在/usr/share/zoneinfo,復制相應時區覆蓋/etc/localtime即可 [lijia@single azkaban-web-2.5.0]$ ll /usr/share/zoneinfo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime *修改web server 和excutor server 都需要配置時區,必須和系統時區一致 default.timezone.id=Asia/Shanghai

安裝mysql

配置mysql

下載mysql數據腳本

wget https://s3.amazonaws.com/azkaban2/azkaban2/2.5.0/azkaban-sql-script-2.5.0.tar.gz
tar -zxvf azkaban-sql-script-2.5.0.tar.gz –C ~/azkaban/
創建用戶、分配權限並執行腳本

mysql –uroot –pxxxx
創建數據庫: CREATE DATABASE azkaban;
創建用戶名:CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban'
分配權限:GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,INDEX ON `azkaban`.* TO 'azkaban'@'%' WITH GRANT OPTION;
flush privileges;
quit;
通過azkaban賬號登錄mysql:mysql –uazkaban –pazkaban
Use azkaban;
source ~/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql

Azkaban Web Server 安裝

1.下載安裝包

wget https://s3.amazonaws.com/azkaban2/azkaban2/2.5.0/azkaban-web-server-2.5.0.tar.gz
tar –zxvf azkaban-web-server-2.5.0.tar.gz  –C  ~/azkaban/
2.上傳依賴包

上傳mysql驅動包至 ~/azkaban/azkaban-web-2.5.0/extlib/

3.生成jetty ssl所需密鑰文件

keytool -keystore keystore -alias jetty -genkey -keyalg RSA
        Enter keystore password:  mysteel
        What is your first and last name?
          [Unknown]:  mysteel
        What is the name of your organizational unit?
          [Unknown]:  mysteel
        What is the name of your organization?
          [Unknown]: mysteel
        What is the name of your City or Locality?
          [Unknown]:SH
        What is the name of your State or Province?
          [Unknown]:SH
        What is the two-letter country code for this unit?
          [Unknown]:CN
       Is CN=mysteel, OU= mysteel, O= mysteel, L=SH, ST=SH, C=CN correct?  
      [no]:  yes  
        Enter key password for < mysteel >
                (RETURN if same as keystore password):  mysteel

注意:這里keystore的密碼為mysteel,key的密碼為mysteel可自行修改 最后將生成的keystore文件放到 Azkaban安裝目錄中~/azkaban/azkaban-web-2.5.0/ (也可通過修改配置文件改變其默認存放地址)

4.修改配置文件 (conf/azkaban.propreties)

修改首頁樣式及時區信息

azkaban.name=Job Tasks
azkaban.label=mysteel workflow
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=web/
default.timezone.id=Asia/Shanghai
修改mysql連接,可自行修改

database.type=mysql
mysql.port=3306
mysql.host=192.168.200.184
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100
修改 Jetty 服務器屬性,包括 keystore 的相關配置

jetty.maxThreads=25
jetty.ssl.port=8443
jetty.port=8081
jetty.keystore=keystore
jetty.password=mysteel
jetty.keypassword= mysteel
jetty.truststore=keystore
jetty.trustpassword= mysteel
修改郵件設置(可選)

mail.sender=xxxxxxx@mysteel.com
    mail.host=smtp.126.com
    mail.user= xxxxxxx@mysteel.com
    mail.password=xxx (注:發送郵箱的密碼)

5.用戶及權限配置

進入 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 Server安裝

1.下載安裝包

wget https://s3.amazonaws.com/azkaban2/azkaban2/2.5.0/azkaban-executor-server-2.5.0.tar.gz
tar –zxvf  azkaban-executor-server-2.5.0.tar.gz  –C  ~/azkaban/
2.修改配置文件 (conf/azkaban.propreties)

修改時區信息

default.timezone.id=Asia/Shanghai
修改mysql連接,可自行修改

database.type=mysql
mysql.port=3306
mysql.host=192.168.200.184
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100
配置端口,默認就好

executor.maxThreads=50
executor.port=12321
executor.flow.threads=30
在web server 的azkaban.properties配置executor的連接,特別注意,如果兩個server不是在一台主機上,web server 需要配置executor.host

# Azkaban Executor settings
executor.port=12321
executor.host=ip/hostname
啟動驗證

啟動web server

~/azkaban/azkaban-web-2.5.0/bin/azkaban-web-start.sh(azkaban-web-shutdown.sh停止)
 訪問 https://ip:8443   出現界面安裝成功
啟動 executor server

~/azkaban/azkaban-executor-2.5.0/bin/azkaban-exec-start.sh(azkaban-executor-shutdown.sh 停止

Azkaban web server插件安裝

為了后邊插件的安裝,需要在${AZKABAN_WEB_SERVER}/plugins/目錄下創建viewer目錄,用來安裝各種viewer插件。當安裝好一個插件后需要重啟服務,讓插件生效。

安裝HDFS Viewer插件

1.解壓插件

1.解壓插件 在viewer目錄中解壓azkaban-hdfs-viewer-2.5.0.tar.gz,得到azkaban-hdfs-viewer-2.5.0目錄,將其更名為hdfs。最終,這個插件的目錄路徑是:${AZKABAN_WEB_SERVER}/plugins/viewer/hdfs。

2.配置HDFS Viewer

修改${AZKABAN_WEB_SERVER}/plugins/viewer/hdfs/conf/plugin.properties。根據應用場景修改proxy.user。需要注意的是配置viewer.external.classpaths並沒有任何效果,不知是bug還是我用錯了,以至於需要使用下面的步驟來配置

3.增加依賴jar包

這個版本的Azkaban無法找到Hadoop2中的相關依賴jar,而HDFS Viewer需要以下依賴:

commons-cli-1.2.jar,hadoop-auth-2.5.1.jar,hadoop-common-2.5.1.jar
hadoop-hdfs-2.5.1.jar,protobuf-java-2.5.0.jar

注:這么做的缺點是以后hadoop如果升級,要將這些jar更新

4.查看效果

注意:如果hadoop集群已經有了用戶及權限驗證,需要配置代理用戶等信息,具體請參考官方文檔(http://azkaban.github.io/azkaban/docs/latest/#hadoopsecuritymanager)

安裝Job Summary插件

1.解壓插件

在viewer目錄中解壓azkaban-jobsummary-2.5.0.tar.gz,得到azkaban-jobsummary-2.5.0目錄,將其更名為job summary。最終,這個插件的目錄路徑是

${AZKABAN_WEB_SERVER}/plugins/viewer/jobsummary
2.配置Job Summary

默認情況下不用做任何改到,如果需要修改

${AZKABAN_WEB_SERVER}/plugins/viewer/jobsummary/conf/plugin.properties。

3.查看效果

安裝Reportal插件

Reportal插件的安裝不僅是要在Azkaban Web Server上進行(Viewer插件),也需要在Azkaban Executor Server上進行(Jobtype插件)。本小節主要是說明如何在前者上的安裝;后者上的安裝參考Azkaban Executor Server的安裝和部署。

1.解壓插件

由於azkaban-reportal-2.5.0.tar.gz中不僅包含Viewer插件,還包含Jobtype插件,所以先在一個臨時目錄中解壓這個包,然后將解壓得到的viewer/reportal/目錄拷貝到上步中的viewer目錄下。最終這個插件的目錄路徑為:

${AZKABAN_WEB_SERVER}/plugins/viewer/reportal。
2.配置Reportal Viewer

修改${AZKABAN_WEB_SERVER}/plugins/viewer/reportal/conf/plugin.properties。由於Web Server和Executor Server是分開部署,不能使用本地文件存儲report任務的結果,而是用hdfs存儲:

reportal.output.filesystem=hdfs

3.效果

配置成功后,首頁導航欄會出現Reportal鏈接

Azkaban Executor Server 插件安裝

進入${AZKABAN_EXECUTOR_SERVER}/plugins目錄,在該目錄下解壓azkaban-jobtype-2.5.0.tar.gz得到目錄:azkaban-jobtype-2.5.0。將該目錄更名為jobtypes。這個目錄用來存放之后安裝的所有插件,與Web Server中的viewer目錄類似。每次插件的安裝配置需要重啟Executor Server。

1.修改配置文件

修改common.properties

修改${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/common.properties,設置hadoop.home和hive.home,與你的環境變量HADOOP_HOME和HIVE_HOME分布保持一致。例如:

hadoop.home=/usr/local/hadoop
hive.home=/opt/hive
修改commonprivate.properties

修改${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/commonprivate.properties,同樣需要設置hadoop.home和hive.home。另外修改jobtype.global.classpath。例如:

hadoop.home=/usr/local/hadoop
hive.home=/opt/hive
jobtype.global.classpath=${hadoop.home}/etc/hadoop,${hadoop.home}/share/hadoop/common/*,${hadoop.home}/share/hadoop/common/lib/*,${hadoop.home}/share/hadoop/hdfs/*,${hadoop.home}/share/hadoop/hdfs/lib/*,${hadoop.home}/share/hadoop/yarn/*,${hadoop.home}/share/hadoop/yarn/lib/*,${hadoop.home}/share/hadoop/mapreduce/*,${hadoop.home}/share/hadoop/mapreduce/lib/*

2.安裝Hive插件

在上步中hive插件已經被安裝了,這里主要是如何配置hive插件。

配置

在配置之前需要注意的是,azkaban默認hive aux lib的目錄是$HIVE_HOME/aux/lib,所以請在$HIVE_HOME目錄下創建相應的目錄,或者修改下面提到的兩個配置文件中的hive.aux.jars.path和hive.aux.jar.path為你期望的路徑,此外我在這兩個屬性值都加上file://,來指定使用本地文件。

修改private.properties

修改${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/hive/private.properties,如下:

jobtype.classpath=${hive.home}/conf,${hive.home}/lib/*
hive.aux.jar.path=file://${hive.home}/aux/lib
jobtype.classpath與${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/commonprivate.properties中的jobtype.global.classpath一起組合成hive任務的classpath。所以這兩個屬性如何賦值,可以靈活設置,保證classpath是你要的即可。

修改plugin.properties

修改${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/hive/plugin.properties,如下:

hive.aux.jars.path=file://${hive.home}/aux/lib

源碼的修改與編譯

這個版本的Azkaban中的${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/hive/azkaban-jobtype-2.5.0.jar有bug,在Hadoop2.5.1上(其他2.x未驗證),運行hive任務會拋出如下異常:

Exception in thread "main" java.lang.NoSuchMethodError: 
org.apache.hadoop.hive.shims.HadoopShims.usesJobShell()Z
     at azkaban.jobtype.HadoopSecureHiveWrapper.runHive(HadoopSecureHiveWrapper.java:148)
     at azkaban.jobtype.HadoopSecureHiveWrapper.main(HadoopSecureHiveWrapper.java:115)
解決辦法是修改
${AZKABAN_PLUGINS_SOURCE}/plugins/jobtype/src/azkaban/jobtype/HadoopSecureHiveWrapper.java,找到如下代碼片段:
if (!ShimLoader.getHadoopShims().usesJobShell()) {
}
將其中的if條件去掉,也就是刪除兩行。然后進入
${AZKABAN_PLUGINS_SOURCE}/plugins/hadoopsecuritymanager/目錄,運行:
sudo ant
再進入${AZKABAN_PLUGINS_SOURCE}/plugins/jobtype,同樣運行:
sudo ant
成功后會生成${AZKABAN_PLUGINS_SOURCE}/dist/jobtype/jars/azkaban-jobtype-2.5.0-rc3.jar,使用這個jar來替換${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/hive/azkaban-jobtype-2.5.0.jar。

安裝Reportalhive插件

1.解壓部署

解壓azkaban-reportal-2.5.0.tar.gz, 將jobtypes/reportalhive/拷貝到${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes目錄。完整的目錄路徑是:${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/reportalhive。

2.更新依賴jar

在Reportalhive插件根目錄下的azkaban-hadoopsecuritymanager-2.2.jar和azkaban-jobtype-2.1.jar兩個jar和當前版本不一致。需要用hive插件中的對應jar(${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/hive)來替換掉這兩個jar,否則在運行report任務時會如下報錯:

Exception in thread "main" java.lang.ClassNotFoundException: azkaban.jobtype.ReportalHiveRunner
     at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
     at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
     at java.security.AccessController.doPrivileged(Native Method)
     at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
     at azkaban.jobtype.HadoopJavaJobRunnerMain.getObject(HadoopJavaJobRunnerMain.java:299)
     at azkaban.jobtype.HadoopJavaJobRunnerMain.(HadoopJavaJobRunnerMain.java:146)
     at azkaban.jobtype.HadoopJavaJobRunnerMain.main(HadoopJavaJobRunnerMain.java:76)
${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/reportalhive/lib/azkaban-reportal-2.5.jar也有bug,
需要修改
${AZKABAN_PLUGINS_SOURCE}/plugins/reportal/src/azkaban/jobtype/ReportalHiveRunner.java文件,找到如下代碼片段:
if (!ShimLoader.getHadoopShims().usesJobShell()) {.
}
刪除if條件,然后進入${AZKABAN_PLUGINS_SOURCE}/plugins/reportal,運行sudo ant生成${AZKABAN_PLUGINS_SOURCE}/dist/reportal/jars/azkaban-reportal-2.5.jar,用這個jar來替換掉${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/reportalhive/lib/azkaban-reportal-2.5.jar,否則在運行report任務時會報如下錯誤:
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.hive.shims.HadoopShims.usesJobShell()Z
     at azkaban.jobtype.HadoopSecureHiveWrapper.runHive(HadoopSecureHiveWrapper.java:148)
     at azkaban.jobtype.HadoopSecureHiveWrapper.main(HadoopSecureHiveWrapper.java:115)

3.配置Reportalhive

配置plugin.properties

可以注釋掉hive.home,因為我們在${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/common.properties和${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/commonprivate.properties中已經配置過了,其他修改的屬性:

hive.aux.jars.path=file://${hive.home}/aux/lib
hadoop.dir.conf=${hadoop.home}/etc/Hadoop
hive.aux.jars.path - 使用本地的hive aux lib,如果使用hdfs,將file改為hdfs即可 
hadoop.dir.conf - hadoop2的配置目錄與hadoop1不一樣,請注意修改

配置private.properties

同上,可以注釋掉hive.home,其他修改的屬性:

jobtype.classpath=${hadoop.home}/conf,${hadoop.home}/lib/*,${hive.home}/lib/*,./lib/*
hive.aux.jars.path=file://${hive.home}/aux/lib
hadoop.dir.conf=${hadoop.home}/etc/hadoop
jobtype.classpath - 與hive插件的配置不一樣,需要將插件本身的lib目錄加入到classpath,以使用azkaban-reportal-2.5.jar,否則會報錯。
jobtype.global.classpath - 已在${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/commonprivate.properties中定義,可以注釋掉。
hive.classpath.items - 未用,也可以注釋掉。

4.效果

Ajax API適用

http://azkaban.github.io/azkaban/docs/latest/#ajax-api

Web 界面操作

http://azkaban.github.io/azkaban/docs/latest/#using-azkaban

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM