azkaban 能夠做爲hadoop 任務的調度工具,也能夠做爲shell任務和java任務的調度工具。安裝過程有點繁瑣,見安裝文檔。html
見連接 http://www.itwendao.com/artic...java
經過任務之間的依賴關係(dependencies)構建DAGshell
下面是一個 upload.job 的例子, 依賴 report-en.job服務器
type=java #指定類的全路徑 job.class=com.example.demo.task.BbUploadJob #指定執行jar包的路徑 classpath=lib/* #依賴任務 dependencies=report-en #jvm 參數 Xmx=512M # 自定義參數 batch.timestamp=${azkaban.flow.start.timestamp}
azkaban 目前包含Quartz,支持 Cron 表達式app
JavaJob 目前須要配置Hadoop,可是能夠經過修改源代碼來去掉 Hadoop 的依賴關係,參考安裝過程。jvm
Java Job template工具
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; } }
在JavaJob 中可使用Spring,和普通的Java代碼如出一轍oop
this.classPathXmlApplicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); this.reportService = (ReportService) this.classPathXmlApplicationContext.getBean("reportService");
azkaban 原生就支持通知功能,在安裝的時候配置smtp服務器,在job文件中裏配置failure.emails, success.emails, notify.emails 來通知任務執行狀況(多個郵箱地址用逗號分隔)this
azkaban支持任務之間傳遞參數,A任務能夠向依賴A的任務B傳遞參數。其實是經過讀寫臨時文件來實現這個功能。spa
System.getenv("JOB_OUTPUT_PROP_FILE") // 任務輸出的參數文件 System.getenv("JOB_PROP_FILE") // 任務初始化的參數文件
B任務初始化的參數文件中會包含A任務輸出的參數,這是azkaban幫咱們作的。
JavaJob 更加方便,只要在Job中增長一個getJobGeneratedProperties方法,返回Props對象,而後B任務能夠直接在初始化的Props中讀取到這個參數。
public Props getJobGeneratedProperties(){ Props props = new Props(); props.put("demo.test.arg1", "Hello World!"); return props; }