摘要:使用建立一個(gè)簡(jiǎn)單的任務(wù)調(diào)度系統(tǒng)可以作為任務(wù)的調(diào)度工具,也可以作為任務(wù)和任務(wù)的調(diào)度工具。更加方便,只要在中增加一個(gè)方法,返回對(duì)象,然后任務(wù)可以直接在初始化的中讀取到這個(gè)參數(shù)。
使用azkaban 建立一個(gè)簡(jiǎn)單的任務(wù)調(diào)度系統(tǒng)
azkaban 可以作為hadoop 任務(wù)的調(diào)度工具,也可以作為shell任務(wù)和java任務(wù)的調(diào)度工具。安裝過程有點(diǎn)繁瑣,見安裝文檔。
Job Type見鏈接 http://www.itwendao.com/artic...
任務(wù)DAG通過任務(wù)之間的依賴關(guān)系(dependencies)構(gòu)建DAG
下面是一個(gè) upload.job 的例子, 依賴 report-en.job
type=java #指定類的全路徑 job.class=com.example.demo.task.BbUploadJob #指定執(zhí)行jar包的路徑 classpath=lib/* #依賴任務(wù) dependencies=report-en #jvm 參數(shù) Xmx=512M # 自定義參數(shù) batch.timestamp=${azkaban.flow.start.timestamp}schedule
azkaban 目前包含Quartz,支持 Cron 表達(dá)式
java jobJavaJob 目前需要配置Hadoop,但是可以通過修改源代碼來去掉 Hadoop 的依賴關(guān)系,參考安裝過程。
Java Job template
run 相當(dāng)于 main 方法,任務(wù)代碼寫在這里
cancel 在 run 方法出現(xiàn) Exception 之后調(diào)用,任務(wù)失敗后處理
getJobGeneratedProperties 是輸出的參數(shù),用于給下一個(gè)任務(wù)傳遞參數(shù)
import azkaban.utils.Props; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class JavaJob1 { private static final Logger logger = LoggerFactory.getLogger(JavaJob1.class); private Props props; public JavaJob1(String name, Props props) { this.props = props; } public void run() { String timestamp = props.getString("azkaban.flow.start.timestamp"); logger.info("timestamp value is ==> " + timestamp); } public void cancel(){ } public Props getJobGeneratedProperties(){ Props props = new Props(); return props; } }java job 中使用 Spring
在JavaJob 中可以使用Spring,和普通的Java代碼一模一樣
this.classPathXmlApplicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); this.reportService = (ReportService) this.classPathXmlApplicationContext.getBean("reportService");其他問題 郵件通知
azkaban 原生就支持通知功能,在安裝的時(shí)候配置smtp服務(wù)器,在job文件中里配置failure.emails, success.emails, notify.emails 來通知任務(wù)執(zhí)行情況(多個(gè)郵箱地址用逗號(hào)分隔)
任務(wù)之間參數(shù)傳遞azkaban支持任務(wù)之間傳遞參數(shù),A任務(wù)可以向依賴A的任務(wù)B傳遞參數(shù)。實(shí)際上是通過讀寫臨時(shí)文件來實(shí)現(xiàn)這個(gè)功能。
System.getenv("JOB_OUTPUT_PROP_FILE") // 任務(wù)輸出的參數(shù)文件 System.getenv("JOB_PROP_FILE") // 任務(wù)初始化的參數(shù)文件
B任務(wù)初始化的參數(shù)文件中會(huì)包含A任務(wù)輸出的參數(shù),這是azkaban幫我們做的。
JavaJob 更加方便,只要在Job中增加一個(gè)getJobGeneratedProperties方法,返回Props對(duì)象,然后B任務(wù)可以直接在初始化的Props中讀取到這個(gè)參數(shù)。
public Props getJobGeneratedProperties(){ Props props = new Props(); props.put("demo.test.arg1", "Hello World!"); return props; }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/67963.html
工作流調(diào)度系統(tǒng)一個(gè)完整的數(shù)據(jù)分析系統(tǒng)大都是由海量的任務(wù)單元組成shell腳本程序,java,mapreduce程序、hive腳本等等組成,非常復(fù)雜,各任務(wù)單元之間存在時(shí)間先后及前后依賴關(guān)系。為了很好地組織起這樣的復(fù)雜系統(tǒng),能夠按照計(jì)劃執(zhí)行,就必須要一個(gè)工作流調(diào)度系統(tǒng)來調(diào)度執(zhí)行。例如,某個(gè)業(yè)務(wù)系統(tǒng)可能每天產(chǎn)生20G原始數(shù)據(jù),我們每天都要對(duì)其進(jìn)行處理。具體處理步驟如下所示:1. 通過Hadoop先將原...
摘要:顯然,這單獨(dú)執(zhí)行不起作用這將通過子操作符被作為像是自己的調(diào)度任務(wù)中那樣運(yùn)行。子也必須有個(gè)可用調(diào)度即使子作為其父的一部分被觸發(fā)子也必須有一個(gè)調(diào)度如果他們的調(diào)度是設(shè)成,這個(gè)子操作符將不會(huì)觸發(fā)任何任務(wù)。這兩個(gè)例子都是緣起子操作符被當(dāng)做了回填工作。 showImg(https://segmentfault.com/img/remote/1460000006768714); 前言 Airbnb的...
摘要:概述是一個(gè)我們正在用的工作流調(diào)度器,相對(duì)于傳統(tǒng)的任務(wù)管理,很好的為我們理清了復(fù)雜的任務(wù)依賴關(guān)系監(jiān)控任務(wù)執(zhí)行的情況。步驟三修改默認(rèn)數(shù)據(jù)庫(kù)找到配置文件修改配置注意到,之前使用的的方式是行不通的。微信號(hào)商業(yè)使用請(qǐng)聯(lián)系作者。 showImg(https://segmentfault.com/img/remote/1460000006760428?w=1918&h=1556); 概述 Airfl...
摘要:否則沒有配置環(huán)境會(huì)報(bào)錯(cuò)。重新編譯打包就可以 azkaban azkaban 是一個(gè)用Java開發(fā)的開源調(diào)度工具workflow,同類型的工具有用Python開發(fā)的 airflow 和 luigi. build 在我的windows上無(wú)法build成功,我在CentOS上build成功了 git clone https://github.com/azkaban/azkaban.git c...
閱讀 1281·2021-09-02 13:36
閱讀 2734·2019-08-30 15:44
閱讀 2990·2019-08-29 15:04
閱讀 3208·2019-08-26 13:40
閱讀 3657·2019-08-26 13:37
閱讀 1196·2019-08-26 12:22
閱讀 1034·2019-08-26 11:36
閱讀 1230·2019-08-26 10:41