azkaban的操作指南

前言:

最近在實際工作中玩到了Azkaban,雖然之前有簡單的接觸,但是真正用到的時候,才能體會到這個工具的實用性有多強,總結下真個操作過程。在總結整個操作過程之前先簡單描述下工作流調度系統的優勢。

1、工作流調度系統的優勢

一個完整的數據分析系統通常都是由大量任務單元組成:
shell腳本程序,java程序,mapreduce程序、hive腳本等

  • 各任務單元之間存在時間先后及前后依賴關系
  • 為了很好地組織起這樣的復雜執行計劃,需要一個工作流調度系統來調度執行;

例如,我們可能有這樣一個需求,某個業務系統每天產生20G原始數據,我們每天都要對其進行處理,處理步驟如下所示:

  1. 通過Hadoop先將原始數據同步到HDFS上;
  2. 借助MapReduce計算框架對原始數據進行轉換,生成的數據以分區表的形式存儲到多張Hive表中;
  3. 需要對Hive中多個表的數據進行JOIN處理,得到一個明細數據Hive大表;
  4. 將明細數據進行復雜的統計分析,得到結果報表信息;
  5. 需要將統計分析得到的結果數據同步到業務系統中,供業務調用使用。

以上整個流程組成了我們的一個job,如果采用傳統的linux定時任務去處理這個流程的話,存在一個巨大的隱患,job失敗率很高,流程無法控制,沒有預警機制。所以類似的這種工作流調度器的工具就應運而生!

工作流調度實現方式:
簡單的任務調度:直接使用linux的crontab來定義;
復雜的任務調度:開發調度平臺或使用現成的開源調度系統,比如ooize、azkaban等

2、操作指南

2.1、首頁簡介

在這里插入圖片描述

projects:最重要的部分,創建一個工程,所有flows將在工程中運行。
scheduling:顯示定時任務
executing:顯示當前運行的任務
history:顯示歷史運行任務

2.2、創建單一job

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

1、Command 類型單一 job 示例

  • 首先創建一個工程,填寫名稱和描述
  • 之后點擊完成后進入如下界面

在這里插入圖片描述

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

2、job的創建
創建job很簡單,只要創建一個以.job結尾的文本文件就行了,例如我們創建一個工作,用來打印hello,名字叫做command.job

command.job
type=command
command=echo 'hello'

一個簡單的job就創建好了,解釋下,type的command,告訴azkaban用unix原生命令去運行,比如原生命令或者shell腳本,當然也有其他類型,后面說。一個工程不可能只有一個job,我們現在創建多個依賴job,這也是采用azkaban的首要目的。

3、將 job 資源文件打包
注意:只能是zip格式
4、通過 azkaban web 管理平臺創建 project 并上傳壓縮包
在這里插入圖片描述
注意這里這里點擊Execute Flow后可以執行定時任務,也可立即執行
在這里插入圖片描述
查看任務的執行情況
在這里插入圖片描述

2.3、創建多job項目

我們說過多個jobs和它們的依賴組成flow。怎么創建依賴,只要指定dependencies參數就行了。比如導入hive前,需要進行數據清洗,數據清洗前需要上傳,上傳之前需要從ftp獲取日志。
定義5個job:

1、o2o_2_hive.job:將清洗完的數據入hive庫
2、o2o_clean_data.job:調用mr清洗hdfs數據
3、o2o_up_2_hdfs.job:將文件上傳至hdfs
4、o2o_get_file_ftp1.job:從ftp1獲取日志
5、o2o_get_file_fip2.job:從ftp2獲取日志

依賴關系:
3依賴4和5,2依賴3,1依賴2,4和5沒有依賴關系。
注意command寫成執行sh腳本,建議這樣做,后期只需維護腳本就行了(將python腳本放到shell腳本中執行便于維護),azkaban定義工作流程

o2o_2_hive.jobtype=command
# 執行sh腳本,建議這樣做,后期只需維護腳本就行了,azkaban定義工作流程  
command=sh /job/o2o_2_hive.sh 
dependencies=o2o_clean_data
retries=3 #失敗重試3次
retry.backoff=30000 #每次重試間隔,單位為毫秒o2o_clean_data.jobtype=command    
# 執行sh腳本,建議這樣做,后期只需維護腳本就行了,azkaban定義工作流程
command=sh /job/o2o_clean_data.sh
dependencies=o2o_up_2_hdfso2o_up_2_hdfs.jobtype=command#需要配置好hadoop命令,建議編寫到shell中,可以后期維護
command=hadoop fs -put /data/*
#多個依賴用逗號隔開
dependencies=o2o_get_file_ftp1,o2o_get_file_ftp2o2o_get_file_ftp1.jobtype=command
command=wget "ftp://file1" -O /data/file1o2o_get_file_ftp2.job
type=command
command=wget "ftp:file2" -O /data/file2
配置郵件接收者:在任務流Flow的最后一個.job中文件中添加如下內容
這樣將郵箱接受者配置到job文件中便于管理和修改
#任務執行失敗發送郵件,多個接收郵件人之間用“,”分隔
failure.emails=AAAAAAA@126.com,BBBBB@163.com
#任務執行成功發送郵件
success.emails=AAAAA@126.com
#任務執行完成,無論成功還是失敗發送郵件
notify.emails=BBBBBBB@126.com

可以運行unix命令,也可以運行python腳本(強烈推薦)。將上述job打成zip包。
效果圖(可以在下圖中點擊每個job,再次編輯job中的內容
在這里插入圖片描述
點擊o2o_2_hive進入流程,azkaban流程名稱以最后一個沒有依賴的job定義的。查看各個job間的依賴關系
在這里插入圖片描述
下圖是配置執行當前流程或者執行定時流程。
在這里插入圖片描述

說明

Flow view:流程視圖。可以禁用,啟用某些job(這里想要單獨運行某個job時,可以操作隱藏其他的依賴job
Notification:定義任務成功或者失敗是否發送郵件
Failure Options:定義一個job失敗,剩下的job怎么執行
Concurrent:并行任務執行設置
Flow Parametters:參數設置。

參考:https://blog.csdn.net/aizhenshi/article/details/80828726
參考:https://www.jianshu.com/p/3b78164477e8

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456371.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456371.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456371.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

創建對象方法之增

# 1. 創建模型對象 user User() # 2. 給對象賦值 user.username username user.password pwd user.phone phone # 3. 向數據庫提交數據 db.session.add(user) db.sessio…

ActiveMq使用筆記

java JMS技術 .1. 什么是JMS JMS即Java消息服務(Java Message Service)應用程序接口是一個Java平臺中關于面向消息中間件(MOM)的API,用于在兩個應用程序之間,或分布式系統中發送消息,進行異步…

導入Anaconda中的第三方庫運行時報錯:ImportError: Missing required dependencies ['pandas']

今天碰到一個大坑,花了大半天才搞明白問題出在哪來。事情的經過是這樣的:博主下午手賤把已將裝好anaconda2給卸載了(同時裝了2和3),然后再次安裝anconda2后,卻發現配置完pycharm的解釋器后,代碼…

BZOJ2005 NOI2010 能量采集 歐拉函數

題意&#xff1a;求$\sum\limits_{i 1}^N {\sum\limits_{j 1}^M {f(i,j)} } $&#xff0c;其中f(i,j)(0,0)與(i,j)連線上點的數量 題解&#xff1a; 如果一個點(x,y)在(0,0)與(x,y)的連線上&#xff0c;則有gcd(x,y)gcd(x,y)。因此f(i,j)(gcd(i,j)gcd(i,j))且i<i,j<j的…

通過__tablename__ = 'xxx' #定義表名

from datetime import datetimefrom exts import dbclass User(db.Model):__tablename__ user1 #定義表名id db.Column(db.Integer,primary_keyTrue,autoincrementTrue)username db.Column(db.String(10), nullableTrue)password db.Column(db.String(256), nullableTrue)p…

python子類繼承父類特性,pycharm上面已經提示繼承了,為什么會報沒有該特性的錯誤?

因為在子類里覆蓋了父類的__init__ 如果需要調用父類用super class A(object):def __init__(self):self.a 1def fun(self):print self.aclass B(A):def __init__(self):self.b 2super(B, self).__init__()def fun(self):print self.aprint self.bB().fun()

Hadoop偽分布安裝詳解(一)

注&#xff1a;以下截圖針對Ubuntu操作系統&#xff0c;對Centos步驟類似。請讀者選擇不同鏡像即可。 第一部分&#xff1a;VMware WorkStation10 安裝 1.安裝好VMware10虛擬機軟件并下載好Ubuntu16.04 LTS 64位版的鏡像包 2.打開VMware10虛擬機軟件&#xff0c;選擇“創建新的…

C++_const常成員作用

介紹 常成員是什么 1.常成員關鍵詞為&#xff1a;const 2.常成員有&#xff1a;常成員變量、常成員函數、常成員對象 常成員有什么用 1.常成員變量&#xff1a;用于在程序中定義不可修改內部成員變量的函數 2.常成員函數&#xff1a;只能夠訪問成員變量&#xff0c;不可以修改成…

Python開發中收集的一些常用功能Demo

文章目錄目錄&#xff1a;前言&#xff1a;1、Python判斷文件是否存在的幾種方法&#xff1a;1.1、使用os模塊1.2、使用Try語句&#xff08;比較嚴謹的寫法&#xff09;1.3、使用pathlib模塊2、Python中寫入List到文本中并換行的方法3、Python按行讀取文件的幾種簡單實現方法3.…

Unlicensed ARC session – terminating!

問題描述 近日&#xff0c;發現ArcGIS10.4中存在很多bug&#xff0c;而且費了好多時間去測試它&#xff0c;最終決定改用10.1。在降級程序時遇到許可問題。 重裝ArcGIS10.1后&#xff0c;打開工程&#xff0c;所有引用都自動映射&#xff0c;沒報任何錯誤&#xff0c;清理重新生…

SQLAlchemy - Column詳解

SQLAlchemy - Column詳解 Column常用參數&#xff1a; default&#xff1a;默認值 nullable&#xff1a;是否可有 primary_key&#xff1a;是否為主鍵 unique&#xff1a;是否唯一 autoincrement&#xff1a;是否自動增長 onupdate&#xff1a;更新的時候執行的函數 name&…

Linux命令三劍客:grep、sed、awk總結

文章目錄前言一、grep命令語法實例grep結合pattern正則二、sed命令語法案例三、awk命令語法實例前言 最近看到了幾篇關于linux命令grep、sed、awk的文章&#xff0c;這里總結下&#xff0c;方便后面使用。 一、grep grep命令&#xff08;grep的全稱&#xff1a;Global searc…

python 機器學習資料

!(7 Steps to Mastering Machine Learning With Python) [http://www.kdnuggets.com/2015/11/seven-steps-machine-learning-python.html] 轉載于:https://www.cnblogs.com/zk47/p/6448506.html

Flask-SQLAlchemy 中如何不區分大小寫查詢?

例如下面的 User 模型&#xff0c;在數據庫中查詢時并不會區分大小寫 class User(db.Model):__tablename__ usersid db.Column(db.Integer, primary_keyTrue)username db.Column(db.String(64), uniqueTrue, indexTrue)password_hash db.Column(db.String(128)) 這時&…

Git常用指令及功能總結

文章目錄前言&#xff1a;1、常用的git指令2、常用git功能及操作2.1、下載代碼&#xff1a;2.2、當前分支和master保持一致2.3、修改代碼后提交代碼到指定分支2.4、版本回退&#xff08;時空穿梭機&#xff09;2.5、概念工作區和暫存區2.6、添加遠程庫2.7、分支管理2.8、標簽管…

MacOS下MySQL配置

先去官網下載一個 MySQL for mac http://www.cnblogs.com/xiaobo-Linux/ 命令行運行終端&#xff0c;運行下面兩條命令&#xff1a; 12alias mysql/usr/local/mysql/bin/mysqlalias mysqladmin/usr/local/mysql/bin/mysqladmin方便終端直接輸入mysql命令&#xff0c;而不是必須…

HashMap為什么在多線程下會讓cpu100%

首先HashMap并不是sun公司多線程提供的集合&#xff0c;很多時候我們的程序是一個主線程&#xff0c;用了hashmap并沒有什么問題&#xff0c;但是在多線程下會出現問題。 hashmap是一個哈希表&#xff0c;存儲的數據結構也可以是一個線性數組&#xff0c;我們的存儲的數據都在e…

flask中關于endpoint端點、url_map映射、view_func視圖函數,view_functions、及視圖函數名是否何以相同的問題?

視圖函數中關于url_map視圖的映射&#xff1a;應該是[ url->methonds->endpoint ] 而整個請求的過程&#xff0c;是先通過url地址映射到端點endpoint&#xff0c;然后通過endpoint找到試圖函數view_func&#xff08;擴展:在Flask類里邊有一個view_funtions的屬性&…

SparkSQL-從0到1認識Catalyst

文章目錄前言正文預備知識&#xff0d;Tree&RuleCatalyst工作流程ParserAnalyzerOptimizerSparkSQL執行計劃前言 這篇文章是轉載一位大神的文章&#xff0c;為什么要轉載的&#xff0c;實在是因為寫的太經典了&#xff0c;所以忍不住希望能有更多的人可以看到。后續還會轉…

為什么程序員一定要加班?

摘要&#xff1a; 一提到程序員&#xff0c;大多數人的印象大概就是死宅、無趣、沒有私人生活&#xff0c;除了上班寫寫寫代碼&#xff0c;加班寫代碼更是標配。似乎在深夜頂著雞窩頭&#xff0c;目光呆滯&#xff0c;面無表情敲鍵盤的場景才是一個程序員的真實寫照。 當然&…