2015-09-21 75 views
1

我有多個數據源需要在oozie協調工作流程中考慮。數據集是不規則地生成的,這意味着數據可能不會在幾天內生成。例如:使用Oozie協調器處理不規則定時數據

data_set1: 
    ds1-1 - Sept-1-2015 - Data available 
    ds1-2 - Sept-2-2015 - No Data 
    ds1-3 - Sept-3-2015 - No Data 
    ds1-4 - Sept-4-2015 - Data available 
    ds1-5 - Sept-5-2015 - Data available 
    ds1-6 - Sept-6-2015 - No Data 
    ds1-7 - Sept-7-2015 - Data available. 

Data_set2 
    ds2-1 - Sept-1-2015 - Data available 
    ds2-2 - Sept-2-2015 - Data available 
    ds2-3 - Sept-3-2015 - Data available 
    ds2-4 - Sept-4-2015 - No Data 
    ds2-5 - Sept-5-2015 - Data available 
    ds2-6 - Sept-6-2015 - Data available. 
    ds2-7 - Sept-7-2015 - No Data 

我的oozie協調員工作計劃每天運行。但是,由於數據集可能不一定可用,因此我必須拿起數據集,取其最新的數據集。 對於上面給出的數據集,我希望下面的數據集被認爲是每次運行:

Sept-1-2015 - ds1-1, ds2-1 
    Sept-2-2015 - ds1-1, ds2-2 #since no ds1 available for day2. 
    Sept-3-2015 - ds1-1, ds2-3 #since no ds1 available for day3. 
    Sept-4-2015 - ds1-4, ds2-3 #since no ds2 available for day4. 
    Sept-5-2015 - ds1-5, ds2-5 
    Sept-6-2015 - ds1-5, ds2-6 #since no ds1 available for day6 
    Sept-7-2015 - ds1-7, ds2-6 #since no ds2 available for day7. 

有什麼辦法與現有的Oozie的構造來實現這一目標?

回答

1

如果您想獲得最新的可用數據,您應該使用coord:latest EL功能。 基本上,coord:latest表示使用您可以找到的最後一個可用數據。 如果你想可以使用coord:latest(n)這意味着

$ {座標:最新(INT N)}表示同步數據集的第n個最新現有 實例。

在你的情況下,使用下面的例子:

<data-in name="input" dataset="logs"> 
     <instance>${coord:latest(0)}</instance> 
    </data-in>