使用azkaban 創建一個簡單的任務調度系統

使用azkaban 創建一個簡單的任務調度系統

azkaban 能夠做爲hadoop 任務的調度工具,也能夠做爲shell任務和java任務的調度工具。安裝過程有點繁瑣,見安裝文檔。html

Job Type

見連接 http://www.itwendao.com/artic...java

任務DAG

經過任務之間的依賴關係(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}

schedule

azkaban 目前包含Quartz,支持 Cron 表達式app

java job

JavaJob 目前須要配置Hadoop,可是能夠經過修改源代碼來去掉 Hadoop 的依賴關係,參考安裝過程。jvm

Java Job template工具

  1. run 至關於 main 方法,任務代碼寫在這裏
  2. cancel 在 run 方法出現 Exception 以後調用,任務失敗後處理
  3. getJobGeneratedProperties 是輸出的參數,用於給下一個任務傳遞參數
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代碼如出一轍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;
}
相關文章
相關標籤/搜索