1. 程式人生 > >Azkaban 入門

Azkaban 入門

1 Azkaban 概述

1.1 為什麼需要工作流排程系統

一個完整的資料分析系統通常都是由大量任務單元組成:shell,java,mr、hive 等

各任務單元之間存在時間先後及前後依賴關係

為了很好地組織起這樣的複雜執行計劃,需要一個工作流排程系統來排程執行

1.2 什麼是 Azkaban?

Azkaban 是一個批量工作流任務排程器,主要用於在一個工作流內以一個特定的順序執行一組工作和流程,它的配置是通過簡單的 KV 對的方式,通過配置中的 dependencies 來設定依賴關係,Azkaban 使用 job 配置檔案建立任務之間的依賴關係,並提供一個易於使用的 web 使用者介面維護和跟蹤你的工作流。

1.3 特點

  • 相容任何版本的 Hadoop
  • 易於使用的 Web 使用者介面
  • 簡單的工作流的上傳
  • 方便設定任務之間的關係
  • 排程工作流
  • 模組化和可插拔的外掛機制
  • 認證/授權(許可權的工作)
  • 能夠殺死並重新啟動工作流
  • 有關失敗和成功的電子郵件提醒

1.4 架構

1、AzkabanWebServer:AzkabanWebServer 是整個 Azkaban 工作流系統的主要管理者,它使用者登入認證、負責 project管理、定時執行工作流、跟蹤工作流執行進度等一系列任務

2、AzkabanExecutorServer:負責具體的工作流的提交、執行,它們通過資料庫來協調任務的執行

3、關係型資料庫(MySQL):儲存大部分執行流狀態,AzkabanWebServer 和 AzkabanExecutorServer 都需要訪問資料庫

2 安裝部署

1、在 /opt/module 目錄下建立 azkaban 目錄

[djm@hadoop102 module]$ mkdir azkaban

2、解壓 azkaban-web-server-2.5.0.tar.gz、azkaban-executor-server-2.5.0.tar.gz、azkaban-sql-script-2.5.0.tar.gz

[djm@hadoop102 software]$ tar -zxvf azkaban-web-server-2.5.0.tar.gz -C /opt/module/azkaban/
[djm@hadoop102 software]$ tar -zxvf azkaban-executor-server-2.5.0.tar.gz -C /opt/module/azkaban/
[djm@hadoop102 software]$ tar -zxvf azkaban-sql-script-2.5.0.tar.gz -C /opt/module/azkaban/

3、對解壓後的資料夾重新命名

[djm@hadoop102 azkaban]$ mv azkaban-web-2.5.0/ server
[djm@hadoop102 azkaban]$ mv azkaban-executor-2.5.0/ executor

4、建立資料庫並匯入指令碼

mysql> create database azkaban;
mysql> use azkaban;
mysql> source /opt/module/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql

5、生成金鑰對和證書

Keytool 是 Java 資料證書的管理工具,使使用者能夠管理自己的公/私鑰對及相關證書

-keystore:指定金鑰庫的名稱及位置(產生的各類資訊將存在.keystore檔案中)

-genkey:生成金鑰對

-alias:為生成的金鑰對指定別名,如果沒有預設是 mykey

-keyalg:指定金鑰的演算法 RSA/DSA 預設是 DSA

生成 keystore的密碼及相應資訊的金鑰庫

[djm@hadoop102 server]$ keytool -keystore keystore -alias jetty -genkey -keyalg RSA

6、配置時間同步伺服器

7、進入 azkaban web 伺服器安裝目錄 conf 目錄,編輯 azkaban.properties

#Azkaban Personalization Settings
#伺服器UI名稱,用於伺服器上方顯示的名字
azkaban.name=Test
#描述
azkaban.label=My Local Azkaban
#UI顏色
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
#預設web server存放web檔案的目錄
web.resource.dir=/opt/module/azkaban/server/web/
#預設時區,已改為亞洲/上海 預設為美國
default.timezone.id=Asia/Shanghai

#Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
#使用者許可權管理預設類(絕對路徑)
user.manager.xml.file=/opt/module/azkaban/server/conf/azkaban-users.xml

#Loader for projects
#global配置檔案所在位置(絕對路徑)
executor.global.properties=/opt/module/azkaban/executor/conf/global.properties
azkaban.project.dir=projects

#資料庫型別
database.type=mysql
#埠號
mysql.port=3306
#資料庫連線IP
mysql.host=hadoop102
#資料庫例項名
mysql.database=azkaban
#資料庫使用者名稱
mysql.user=root
#資料庫密碼
mysql.password=123456
#最大連線數
mysql.numconnections=100

# Velocity dev mode
velocity.dev.mode=false

# Azkaban Jetty server properties.
# Jetty伺服器屬性.
#最大執行緒數
jetty.maxThreads=25
#Jetty SSL埠
jetty.ssl.port=8443
#Jetty埠
jetty.port=8081
#SSL檔名(絕對路徑)
jetty.keystore=/opt/module/azkaban/server/keystore
#SSL檔案密碼
jetty.password=123456
#Jetty主密碼與keystore檔案相同
jetty.keypassword=123456
#SSL檔名(絕對路徑)
jetty.truststore=/opt/module/azkaban/server/keystore
#SSL檔案密碼
jetty.trustpassword=123456

# Azkaban Executor settings
executor.port=12321

# mail settings
mail.sender=
mail.host=
job.failure.email=
job.success.email=

lockdown.create.projects=false

cache.directory=cache

8、在 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>

9、進入執行伺服器安裝目錄 conf,編輯 azkaban.properties

#Azkaban
#時區
default.timezone.id=Asia/Shanghai

# Azkaban JobTypes Plugins
#jobtype 外掛所在位置
azkaban.jobtype.plugin.dir=plugins/jobtypes

#Loader for projects
executor.global.properties=/opt/module/azkaban/executor/conf/global.properties
azkaban.project.dir=projects

database.type=mysql
mysql.port=3306
mysql.host=hadoop102
mysql.database=azkaban
mysql.user=root
mysql.password=123456
mysql.numconnections=100

# Azkaban Executor settings
#最大執行緒數
executor.maxThreads=50
#埠號(如修改,請與web服務中一致)
executor.port=12321
#執行緒數
executor.flow.threads=30

10、啟動 executor

[djm@hadoop102 executor]$ bin/azkaban-executor-start.sh

11、啟動 web

[djm@hadoop102 server]$ bin/azkaban-web-start.sh

12、訪問 web 頁面

https://hadoop102:8443

3 實戰案例

3.1 單 job

1、在本地建立一個 first.job

#first.job
type=command
command=echo 'this my first job'

2、打成一個壓縮包

3、建立工作流並上傳檔案

4、執行任務

3.2 多 job

1、在本地建立 start.job、step1.job、step2.job、end.job

#start.job
type=command
command=touch /opt/module/kangkang.txt
#step1.job
type=command
dependencies=start
command=echo "this step1 job"
#step2.job
type=command
dependencies=start
command=echo "this step2 job"
#end.job
type=command
dependencies=step1,step2
command=echo "this end job"

2、打成壓縮包

3、建立工作流並上傳檔案

4、執行任務

3.3 javaprocess

1、建立一個 Java 專案

package com.djm.azkaban;

import java.io.FileOutputStream;
import java.io.IOException;

public class AzkabanTest {
    public void run() {
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream("/opt/module/azkaban/output.txt");
            fos.write("this a java progress".getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        AzkabanTest azkabanTest = new AzkabanTest();
        azkabanTest.run();
    }
}

2、打成 jar 包

3、建立 java.job

#java.job
type=javaprocess
java.class=com.djm.azkaban.AzkabanTest
classpath=./*

4、將 jar 和 job 一起打包

5、建立工作流並上傳檔案

6、執行任務

3.4 HDFS

1、建立 fs.job

#hdfs job
type=command
command=/opt/module/hadoop-2.7.2/bin/hadoop fs -mkdir /azkaban

2、打成壓縮包

3、建立工作流並上傳檔案

4、執行任務

3.4 MR

1、建立 mappreduce.job

#mapreduce job
type=command
command=/opt/module/hadoop-2.7.2/bin/hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /wordcount/input /wordcount/output

2、打成壓縮包

3、建立工作流並上傳檔案

4、執行任務

3.6 Hive

1、建立 student.sql

use default;
drop table student;
create table student(id int, name string)
row format delimited fields terminated by '\t';
load data local inpath '/opt/module/datas/student.txt' into table student;
insert overwrite local directory '/opt/module/datas/student'
row format delimited fields terminated by '\t'
select * from student;

2、建立 hive.job

#hive job
type=command
command=/opt/module/hive/bin/hive -f ./student.sql

3、打成壓縮包

4、建立工作流並上傳檔案