1.Azkaban 簡介
Azkaban 一個批量工作流任務調度器,使用Java語言開發。用於在一個工作流內以一個特定的順序運行一組工作和流程。Azkaban使用job配置文件建立任務之間的依賴關係,並提供一個易於使用的web用戶界面維護和跟蹤你的工作流。
Azkaban 的優點
- 提供功能清晰,簡單易用的Web UI界面
- 提供job配置文件快速建立任務和任務之間的依賴關係
- 提供模塊化和可插拔的插件機制,原生支持command、Java、Hive、Pig、Hadoop
- 基於Java開發,代碼結構清晰,易於二次開發
Azkaban 安裝模式
Azkaban 有三種部署方式:單服務模式、2個服務模式、分佈式多服務模式
- solo server model(單服務模式):該模式中 webServer 和 executorServer 運行在同一個進程中,進程名是AzkabanSingleServer。可以使用自帶的H2數據庫或者配置mysql數據。該模式適用於小規模的使用。此模式合適個人試用使用。它也可以用在小規模的使用案例中。
- two server model(2個服務模式):數據庫爲mysql,採用主從設置進行備份,管理服務器(webServer)和執行服務器(executorServer)在不同進程中運行,這種模式下,管理服務器和執行服務器互不影響。適用在較重的生成環境中。
- multiple-executor(分佈式多服務模式):存放元數據的數據庫爲mysql,採用主從設置進行備份,管理服務器(webServer)和執行服務器(executorServer)在不同進程中運行。多個 Executor 模式爲最重的生產環境。
2.Azkaban 3.x 安裝(two-server 模式)
安裝前準備
- 安裝JDK1.8
- 安裝MySQL
1.下載
執行命令
git clone https://github.com/azkaban/azkaban.git
下載完成後可以看到有一個名爲 azkaban 的文件夾,當前最新版本爲3.48.0
2.編譯
cd 到 azkaban 目錄下,執行如下命令生成一系列文件
./gradlew distTar
3.拷貝
新建文件夾:mkdir azkaban-3.48.0
執行命令如下命令拷貝到 azkaban-3.48.0 目錄下
$ cp azkaban/azkaban-exec-server/build/distributions/azkaban-exec-server-3.48.0-8-gdc851ec.tar.gz azkaban-3.48/
$ cp azkaban/azkaban-web-server/build/distributions/azkaban-web-server-3.48.0-8-gdc851ec.tar.gz azkaban-3.48/
$ cp azkaban/azkaban-db/build/distributions/azkaban-db-3.48.0-8-gdc851ec.tar.gz azkaban-3.48/
4.解壓 重命名
$ tar -zxvf azkaban-exec-server-3.48.0-8-gdc851ec.tar.gz
$ tar -zxvf azkaban-web-server-3.48.0-8-gdc851ec.tar.gz
$ tar -zxvf azkaban-db-3.48.0-8-gdc851ec.tar.gz
$ mv azkaban-exec-server-3.48.0-4-g9a42cb2 azkaban-exec-server
$ mv azkaban-web-server-3.48.0-4-g9a42cb2 azkaban-web-server
$ mv azkaban-db-3.48.0-4-g9a42cb2 azkaban-db
5.創建Azkaban元數據庫
登錄mysql,執行如下語句
mysql> create database azkaban;
Query OK, 1 row affected (0.00 sec)
mysql> use azkaban;
Database changed
mysql> source /home/hadoop/software/azkaban-3.48/azkaban-db/create-all-sql-3.48.0-8-gdc851ec.sql
創建的表:
6.創建SSL配置
使用keytool創建SSL配置,keytool是JDK提供的一個工具,輸入如下命令,可以查看
[root@harvey azkaban-3.47.0]# find / -name keytool
/home/hadoop/software/jdk/bin/keytool
/home/hadoop/software/jdk/jre/bin/keytool
執行命令創建SSL配置
$ keytool -keystore keystore -alias jetty -genkey -keyalg RSA
7.azkaban-exec-server中配置azkaban.properties 添加log4j.properties 添加mysql驅動
拷貝 azkaban-solo-server-3.48.0-8-gdc851ec.tar.gz 到 azkaban-3.48.0 目錄下,解壓並重命名
$ cp azkaban/azkaban-solo-server/build/distributions/azkaban-solo-server-3.48.0-8-gdc851ec.tar.gz azkaban-3.48/
$ tar -zxvf azkaban-solo-server-3.48.0-8-gdc851ec.tar.gz
$ mv azkaban-solo-server-3.48.0-8-gdc851ec azkaban-solo-server
將azkaban-solo-server下的conf plugins 和sql文件夾拷貝到azkaban-exec-server
$ cd azkaban-solo-server
$ cp -a conf/ plugins/ sql/ ~/software/azkaban-3.48/azkaban-exec-server
- 配置conf/azkaban.properties
azkaban.name=Harvey # 服務器UI名稱,用於服務器上方顯示的名字
azkaban.label=My Local Azkaban # 描述信息
default.timezone.id=Asia/Shanghai # 時區,默認爲美國America/Los_Angeles
database.type=mysql # 數據庫類型
mysql.port=3306 # 端口
mysql.host=192.168.191.65 # 數據庫連接IP
mysql.database=azkaban # 數據庫實例名
mysql.user=root # 數據庫用戶名
mysql.password=P@ssw0rd # 數據庫密碼
mysql.numconnections=100 # 最大連接數
- 在conf目錄下添加log4j.properties
$ touch log4j.properties
log4j.rootLogger=INFO,C
log4j.appender.C=org.apache.log4j.ConsoleAppender
log4j.appender.C.Target=System.err
log4j.appender.C.layout=org.apache.log4j.PatternLayout
log4j.appender.C.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
- 添加MySQL驅動
在azkaban-exec-server目錄下創建文件夾:mkdir extlib
將lib目錄下的mysql驅動複製到extlib目錄下
$ mkdir extlib
$ cp lib/mysql-connector-java-5.1.28.jar extlib/
拷貝azkaban-exec-server目錄下的conf和extlib到azkaban-web-server目錄下
$ cp -a conf/ extlib/ ../azkaban-web-server
8.啓動,先啓動exec-server(執行器),然後啓動web-server(web服務)
cd azkaban-exec-server/bin
./start-exec.sh
cd azkaban-web-server/bin
./start-web.sh
啓動完成後,jps查看進程
[hadoop@harvey bin]$ jps
2096 AzkabanExecutorServer
2135 AzkabanWebServer
2154 Jps
啓動azkaban遇到問題解決
- 啓動exec-server異常
異常:java.io.FileNotFoundException: conf/global.properties (沒有那個文件或目錄)
解決方法:vim azkaban.properties 修改 executor.global.properties 爲絕對路徑
- 啓動exec-web異常
異常:java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
解決方法:vim azkaban.properties 修改 user.manager.xml.file 爲絕對路徑
9.訪問Azkaban UI界面
看到的頁面奇醜無比,哈哈,解決方法如下
修改azkaban.properties文件中的web.resource.dir
然後重啓web-server,再次訪問,可以看到UI界面就正常了
輸入用戶名密碼azkaban/azkaban登錄