Azkaban 使用

Azkaban 安裝請參考博客:
https://blog.csdn.net/hg_harvey/article/details/80342396

登錄Azkaban,首頁有四個菜單
這裏寫圖片描述
projects:最重要的部分,創建一個工程,所有flows將在工程中運行。
Scheduling:顯示定時任務
Executing:顯示當前運行的任務
History:顯示歷史運行任務

主要介紹Projects部分,在創建工程前,我們先了解下之間的關係,一個工程包含一個或多個flows,一個flow包含多個job。job是你想在azkaban中運行的一個進程,可以是簡單的linux命令,可是java程序,也可以是複雜的shell腳本、或者python腳本,當然,如果你安裝相關插件,也可以運行插件。一個job可以依賴於另一個job,這種多個job和它們的依賴組成的圖表叫做flow。

web-server:節點負責項目作業管理(上傳和分發)
exec-server:負責具體執行的executor會解析job文件

一、commond 類型單一Job

1.創建工程

這裏寫圖片描述

創建完成後跳轉到如下頁面
這裏寫圖片描述

Flows:工作流程,有多個job組成
Permissions:權限管理
Project Logs:工程日誌

2.創建Job

job就是一個以.job結尾的文本文件,例如創建一個job,名爲hello.job,用於打印hello azkaban

# hello.job
type = command
command = echo 'hello azkaban'
3.打包

將創建的job打包成.zip壓縮文件,注意只能是.zip格式
這裏寫圖片描述

4.使用Azkaban UI 界面創建project並上傳壓縮包

這裏寫圖片描述
點擊Execute執行
這裏寫圖片描述
然後點擊Continue
這裏寫圖片描述

執行後,點擊Detail,查看日誌
這裏寫圖片描述

可以看到打印出來hello azkaban
這裏寫圖片描述

二、commond 類型多JOb 工作流 flow

1.創建項目

首先,創建一個項目,名爲 command_multiple_job
這裏寫圖片描述

2.job 創建

假設有這麼一種場景:
(1).task1 依賴 task2
(2).task2 依賴 task3
(3).task3 依賴 task4
說明:假設task1是一個計算指標任務,task2 給 task1 提供執行需要的基礎數據
task3 給 task2 提供數據,以此類推。

3.flow 創建

多個jobs和它們的依賴組成flow。怎麼創建依賴,只要指定dependencies參數就行了
定義4個job:
(1).run_task1.job:計算業務指標數據
(2).run_task2.job:計算task1所需要的數據
(3).run_task3.job:計算task2所需要的數據
(4).run_task4.job:從 slaves 中抽取源數據

依賴關係:
task1 依賴 task2,task2 依賴 task3,task3 依賴 task4

4個job文件內容如下(這裏以執行python爲例,這個比較popular哈)

# run_task1.job
type = command
command = python /home/hadoop/pyshell/run_task1.py
dependencies = run_task2
# run_task2.job
type = command
command = python /home/hadoop/pyshell/run_task2.py
dependencies = run_task3
# run_task3.job
type = command
command = python /home/hadoop/pyshell/run_task3.py
dependencies = run_task4
# run_task4.job
type = command
command = python /home/hadoop/pyshell/run_task4.py

創建python腳本

[hadoop@harvey pyshell]$ touch run_task1.py
[hadoop@harvey pyshell]$ touch run_task2.py
[hadoop@harvey pyshell]$ touch run_task3.py
[hadoop@harvey pyshell]$ touch run_task4.py

4個文件內容如下,筆者只寫了一句打印,這裏根據公司你的業務寫代碼即可。
run_task1.py

#!/usr/bin/python3
# -*- coding: utf-8 -*-
print("task1:計算業務指標數據...")

run_task2.py

#!/usr/bin/python3
# -*- coding: utf-8 -*-
print("task2:計算基礎數據,爲task1提供數據")

run_task3.py

#!/usr/bin/python3
# -*- coding: utf-8 -*-
print("task3:數據清洗,爲task2提供數據")

run_task4.py

#!/usr/bin/python3
# -*- coding: utf-8 -*-
print("task4:從Slaves中抽取源數據")
3.將上述 job 打成zip包,上傳至 azkaban

這裏寫圖片描述
上傳完成後,點擊右側Execute Flow按鈕,查看流程視圖
這裏寫圖片描述
這裏寫圖片描述
Flow view:流程視圖。可以禁用,啓用某些job
Notification:定義任務成功或者失敗是否發送郵件
Failure Options:定義一個job失敗,剩下的job怎麼執行
Concurrent:並行任務執行設置
Flow Parametters:參數設置。

4.執行

(1).執行一次,點擊右下角Execute
(2).定時執行,點擊左下角Schedule
這裏寫圖片描述
設置完成後,執行右下角schedule,即完成調度配置,azkaban這裏的配置與linux下的crontab類似
想要查看job的調度列表,切換到Schedule菜單即可

5.查看項目flow中各個Job的執行情況

這裏寫圖片描述
這裏寫圖片描述
綠色代表成功藍色是運行紅色是失敗。可以查看job運行時間,依賴和日誌,點擊details可以查看各個job運行情況

run_task4.job
這裏寫圖片描述

run_task3.job
這裏寫圖片描述

run_task2.job
這裏寫圖片描述

run_task1.job
這裏寫圖片描述

三、MapReduce 任務

Azkaban 執行 MapReduce 任務,我們以 WordCount 爲例

1.準備數據
$ hadoop fs -mkdir -p /azkaban/input /azkaban/output
$ hadoop fs -put data/words.txt /azkaban/input

words.txt文件內容

Welcomt to azkaban
Hello Hadoop
Hello Hive
Hello HBase
Hello Azkaban

使用hadoop提供的jar統計單詞數量

$ hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.1.jar wordcount /azkaban/input/* /azkaban/output

運行結果
這裏寫圖片描述

2.創建項目

這裏寫圖片描述

3.job創建

job

# mapreduce_wordcount.job
type = command
command=sh /home/hadoop/shell/wordcount.sh

wordcount.sh

#!/bin/bash
# author:harvey
# fileName:wordcount.sh
input=/azkaban/input/*
output=/azkaban/output
hadoop fs -test -e $output
if [ $? -eq 0 ] ;then
    printf "%s is exists!\n" $output
    hadoop fs -rm -r $output
fi
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.1.jar wordcount $input $output
4.打包上傳,執行

這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述

5.查看運行結果

azkaban上打印的日誌顯示已經成功
這裏寫圖片描述

查看運行結果
這裏寫圖片描述

四、Hive 腳本任務

1.創建項目

這裏寫圖片描述

2.job創建

我們要完成,hive中創建表,加載數據,然後導出數據到mysql,分爲兩個job
run_task1:將hive中的數據導出到mysql中
run_task2:hive中創建表,加載數據
依賴關係:run_task1 依賴 run_task2

3.flow創建

job 文件內容如下

# run_task1.job
type = command
command = sh /home/hadoop/shell/run_task1.sh
dependencies = run_task2
# run_task2.job
type = command
command = sh /home/hadoop/shell/run_task2.sh

腳本內容如下

#!/bin/bash
# author:harvey
# fileName:run_task1.sh
#!/bin/bash
# author:harvey
# fileName:run_task1.sh
/home/hadoop/software/sqoop1/bin/sqoop export \
--connect jdbc:mysql://localhost:3306/sqoop \
--username root --password P@ssw0rd \
--table emp \
--export-dir /user/hive/warehouse/test.db/emp \
--input-fields-terminated-by '\t' \
--input-null-string '\\N' --input-null-non-string '\\N' \
-m 1
#!/bin/bash
# author:harvey
# fileName:run_task2.sh
hive -f /home/hadoop/sql/test.sql

sql文件 test.sql內容如下

create database if not exists test;
use test;
drop table if exists emp;
create table emp(
empno int,
ename string,
job string
)
row format delimited fields terminated by '\t';
load data local inpath '/home/hadoop/data/emp.txt' overwrite into table emp;

emp.txt文件內容如下

1001    Tom Java
1002    Jack    PHP
1003    Harvey  BigData
1004    David   IOS
1005    Ketty   DBA

說明:腳本run_task1.sh中爲什麼使用全路徑的原因是筆者使用sqoop運行後,azkaban報找不到sqoop命令(已經配置了環境變量),具體什麼原因筆者也不清楚,如果你知道,記錄留言一下。使用全路徑後就不會命令找不到了。

4.打包上傳

這裏寫圖片描述

5.執行,查看運行結果

執行前記得先在mysql中創建表emp,sql語句如下

DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp` (
  `empno` int(11) DEFAULT NULL,
  `ename` varchar(255) DEFAULT NULL,
  `job` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SET FOREIGN_KEY_CHECKS=1;

這裏寫圖片描述
然後Continue執行
這裏寫圖片描述
執行完成後hive查看錶emp是否存在mysql中查看錶emp是否有數據
這裏寫圖片描述
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章