天天看點

【大資料開發套件排程配置實踐】——不同周期任務依賴配置天任務依賴小時任務小時任務依賴分鐘任務總結

大資料開發過程中常遇到不同運作周期的任務進行依賴,常見 天任務依賴小時任務、 小時任務依賴分鐘任務 。那麼如何通過大資料開發套件開發這兩種場景呢?

本文将從這兩個場景出發,結合排程依賴/參數/排程執行等,介紹不同周期排程依賴的最佳操作實踐。

再此之前,我們先明确幾個概念:

業務日期:業務資料産生的日期,這裡指完整一天的業務資料。在大資料開發套件裡任務每天能處理的最近的完整一天業務資料是昨天的資料,是以業務日期=日常排程日期-1天。

依賴關系:依賴關系是描述兩個或多個節點/工作流之間的語義連接配接關系,其中上遊節點/工作流的運作狀态可以影響下遊節點/工作流的運作狀态,反之則不成立。

排程執行個體:大資料開發套件的排程系統對周期任務進行排程執行時,會先根據任務的配置進行執行個體化,每個執行個體帶上具體的定時時間、狀态、上下遊依賴等屬性。

注意:目前數加大資料開發套件每天自動排程的執行個體都是在昨天晚上23:30生成。

排程規則:排程任務是否能運作起來要滿足的條件:

上遊任務執行個體是否都運作成功。若所有上遊任務執行個體都運作成功則觸發任務進入等待時間狀态。

任務執行個體定時時間是否已經到。任務執行個體進入等待時間狀态後會check本身定時時間是否到,如果時間到了則進入等待資源狀态;

目前排程資源是否充足。任務執行個體進入等待資源狀态後,check目前本項目排程資源是否充足,若充足則可以運作起來。

系統需求統計截止到每小時的業務資料增量,然後在最後一個小時的資料彙總完成後需要一個任務進行一整天的彙總 。

1)每個小時的增量,即每整點起任務統計上個小時時間段的資料量 。需要配置一個每天每整點排程一次的任務,每天最後一個小時的資料是在第二天第一個執行個體進行統計 。

2)最後的彙總任務為每天執行一次,且必須是在每天最後一個小時的資料統計完成之後才能執行,那麼需要配置一個天任務,依賴小時任務的第一個執行個體 。

分析得出的排程形态如下圖:

【大資料開發套件排程配置實踐】——不同周期任務依賴配置天任務依賴小時任務小時任務依賴分鐘任務總結

但是,真正如上圖排程任務定義那樣配置排程依賴後,排程任務執行個體并沒有得到上圖的效果,而是如下圖:

【大資料開發套件排程配置實踐】——不同周期任務依賴配置天任務依賴小時任務小時任務依賴分鐘任務總結

上圖中,天任務必須等小時任務當天其他所有執行個體也執行完成才能執行,而需求是天任務隻需依賴小時任務第一個執行個體,此效果明顯不能滿足需求 。

要達到該場景需求,此時就需要結合任務“跨周期依賴”進行配置,可以将小時任務“跨周期依賴”屬性配置成“自依賴”,然後天任務配置定時時間為零點整,且依賴屬性配置依賴小時任務 。

分析得出的最終方案排程形态如下圖:

【大資料開發套件排程配置實踐】——不同周期任務依賴配置天任務依賴小時任務小時任務依賴分鐘任務總結

此時,小時任務的執行個體為串行執行,第一個執行個體能執行成功,可保證它前面(昨天)的執行個體都已經執行成功,是以天任務可以隻需要依賴第一個執行個體 。

小時任務的排程配置如下圖:

【大資料開發套件排程配置實踐】——不同周期任務依賴配置天任務依賴小時任務小時任務依賴分鐘任務總結

天任務的排程配置如下圖:

【大資料開發套件排程配置實踐】——不同周期任務依賴配置天任務依賴小時任務小時任務依賴分鐘任務總結

參數配置:小時任務每整點執行個體處理前一小時的資料,如可以用$[yyyy-mm-dd-hh24-1/24],天任務 若時間格式為yyyymmdd,用${bdp.system.bizdate};若時間格式為yyyy-mm-dd,用自定義參數$[yyyy-mm-dd-1],具體視詳細設計而定 。參數配置如下圖所示:

【大資料開發套件排程配置實踐】——不同周期任務依賴配置天任務依賴小時任務小時任務依賴分鐘任務總結

測試和補資料:都是手動生成的排程執行個體,選擇的是業務日期 。

如選擇業務日期為 2017-01-10:

天任務執行個體的定時時間是 2017-01-11 00:00:00;

小時執行個體的定時時間是 2017-01-11 00:00:00 至 2017-01-11 23:00:00;

${bdp.system.bizdate} 指派結果為 20170110(執行個體定時間年月日減1天);

$[yyyy-mm-dd-hh24-1/24] 指派結果為 2017-01-10-23 至 2017-01-11-22(執行個體定時間年月日時減1小時)。

自動排程:排程系統自動生成的執行個體,每天的執行個體定時時間都是當天,如“需求分析”中的最終方案效果圖 。

已經有任務每 30 分鐘進行一次同步,将前 30 分鐘的系統資料增量導入到 maxcompute,任務定時為每天的每個整點和整點 30 分運作 。現在需要配置一個小時任務,每 6 個小時進行一次統計,即每天分别統計 0 點到 6 點之間、6 點到 12 點之間、12 點到 18 點之間、18 點到明天 0 點整之間的資料 。

1) 分鐘任務:

00:00 執行個體同步的是昨天最後 30 分鐘的資料,産出的表分區如“昨天日期年-月-日-23:30”;

00:30 執行個體同步的是今天 00:00-00:30 之間的資料,産出的分區如“今天日期年-月-日-00:00”;

01:00 執行個體同步到是今天 00:30-01:00 之間的資料,産出的分區如“今天日期年-月-日-00:30”;

以此類推, 23:30 執行個體同步的是今天 23:00-23:30 之間的資料,産出的分區如:“今天日期年-月-日-23:00”

2)小時任務:

每 6 個小時進行一次統計,則一天排程 4 次;

統計 0 點到 6 點之間的資料,則依賴分鐘任務當天的 00:30—6:00 共 12 個執行個體;

統計 6 點到 12 點之間的資料,則依賴分鐘任務當天的 6:30—12:00 共 12 個執行個體;

統計 12 點到 18 點之間的資料,則依賴分鐘任務當天的 12:30—18:00 共 12 個執行個體;

統計 18 點到第二天 0 點之間的資料,則依賴分鐘任務當天的 18:30—23:30 以及第二天 00:00 共 12 個執行個體 。

【大資料開發套件排程配置實踐】——不同周期任務依賴配置天任務依賴小時任務小時任務依賴分鐘任務總結
【大資料開發套件排程配置實踐】——不同周期任務依賴配置天任務依賴小時任務小時任務依賴分鐘任務總結

如上圖,10 日 18 點到 11 日 0 點之間的資料,11 日小時任務 0 點整點執行個體隻依賴了分鐘任務 11 日 0 點整執行個體,不能確定分鐘任務 10 日 18:30 至 23:30 的執行個體是否執行成功 。

要達到該場景需求,此時就需要結合任務“跨周期依賴”進行配置,可以将分鐘任務“跨周期依賴”屬性配置成“自依賴”,然後小時任務依賴屬性配置依賴小時任務 。

【大資料開發套件排程配置實踐】——不同周期任務依賴配置天任務依賴小時任務小時任務依賴分鐘任務總結

此時,分鐘任務的執行個體為串行,每個執行個體能執行成功,可保證它前面(或昨天)的執行個體都已經執行成功,是以小時任務每個執行個體可以隻需要依賴分鐘任務定時時間離它最近(小于等于)的一個執行個體 。

分鐘任務的排程配置如下圖:

【大資料開發套件排程配置實踐】——不同周期任務依賴配置天任務依賴小時任務小時任務依賴分鐘任務總結

小時任務排程配置如下圖:

【大資料開發套件排程配置實踐】——不同周期任務依賴配置天任務依賴小時任務小時任務依賴分鐘任務總結

參數配置:分鐘任務每個執行個體處理前面30分鐘資料産出的分區可以用參數如 $[yyyy-mm-dd-hh24:mi-30/24/60] , 具體視詳細設計而定 。配置類似下圖:

【大資料開發套件排程配置實踐】——不同周期任務依賴配置天任務依賴小時任務小時任務依賴分鐘任務總結

測試和補資料:都是手動生成的排程執行個體,選擇的是業務日期。如選擇業務日期為 2017-01-10:

分鐘任務執行個體的定時時間是 2017-01-11 00:00:00 至 2017-01-11 23:30:00,共 48 個執行個體;

小時執行個體的定時時間是 2017-01-11 00:00:00、06:00:00、12:00:00、18:00:00 共 4 個執行個體;

$[yyyy-mm-dd-hh24:mi-30/24/60] 指派結果為 2017-01-10-23:30 至 2017-01-11-23:00(執行個體定時間年月日時分減 30 分鐘)。

自動排程:排程系統自動生成的執行個體,每天都執行個體定時時間都是當天,如“需求分析”中的最終方案效果圖 。

長周期任務依賴短周期任務時,如果短周期有自依賴:當天的排程執行個體中,長周期任務的每個執行個體隻依賴短周期執行個體中定時時間與它最近(且小于)的一個執行個體 。

長周期任務(小時)依賴短周期任務(分鐘)時,如果短周期無自依賴:當天的排程執行個體中,長周期任務的每個執行個體會依賴定時時間小于等于且沒被本任務其他執行個體依賴的短周期執行個體;天/周/月依賴小時/分鐘任務例外,因為天任務執行個體會依賴所有小時/分鐘任務 。

排程周期和排程時間參數配合使用,最終排程參數替換的值取決于每次排程的執行個體定時時間,而排程上看到的 業務日期=執行個體定時時間年月日減1天 。

繼續閱讀