gpt4 book ai didi

hadoop - 安排每周 Oozie

转载 作者:可可西里 更新时间:2023-11-01 14:35:04 25 4
gpt4 key购买 nike

我刚刚开始使用 Oozie。希望这里有人能提供一些有用的建议。

这是 coordinator.xml 的一个片段

<coordinator-app name="weeklyABCFacts" frequency="${coord:days(7)}"     start="${start}T00:00Z" end="${end}" timezone="CET" xmlns="uri:oozie:coordinator:0.1">
<controls>
<timeout>-1</timeout>
<concurrency>1</concurrency>
<execution>FIFO</execution>
</controls>
<datasets>

<dataset name="weekly-f_stats-flag" frequency="${coord:days(7)}" initial-instance="2013-07-01T00:00Z" timezone="CET">
<uri-template>${nameNode}/warehouse/hive/f_stats/dt=${YEAR}W${WEEK} </uri-template>
</dataset>
</datasets>
...
</coordinator-app>

与我的问题相关的部分在标签内。它们通常用以下方式表示:"...revenue_feed/${YEAR}/${MONTH}/${DAY}/${HOUR}..."

这部分可以用WEEK表示吗?即下表中的最后一列。

问题的原因是我们的日期表有一个名为'iso_week'的字段列(例如28,或者它对应的日期范围是2013年7月8日-14日)。它看起来像下面这样:

-----------------------------------+
|date_field |iso_week|iso_week_date|
-----------------------------------+
'2013-07-08', '28', '2013W28'
'2013-07-09', '28', '2013W28'
'2013-07-10', '28', '2013W28'
'2013-07-11', '28', '2013W28'
'2013-07-12', '28', '2013W28'
'2013-07-13', '28', '2013W28'
'2013-07-14', '28', '2013W28'

我希望这已经足够清楚了,否则,请告诉我还有什么方法可以更清楚。

最佳答案

没有(在我正在查看的 3.3.2 源代码中),但是没有什么可以阻止您下载源代码并修改 core/java/org/apache/oozie/coord/CoordELEvaluator.java 文件,特别是 createURIELEvaluator(String) 方法:

public static ELEvaluator createURIELEvaluator(String strDate) throws Exception {
ELEvaluator eval = new ELEvaluator();
Calendar date = Calendar.getInstance(DateUtils.getOozieProcessingTimeZone());
// always???
date.setTime(DateUtils.parseDateOozieTZ(strDate));
eval.setVariable("YEAR", date.get(Calendar.YEAR));
eval.setVariable("MONTH", make2Digits(date.get(Calendar.MONTH) + 1));
eval.setVariable("DAY", make2Digits(date.get(Calendar.DAY_OF_MONTH)));
eval.setVariable("HOUR", make2Digits(date.get(Calendar.HOUR_OF_DAY)));
eval.setVariable("MINUTE", make2Digits(date.get(Calendar.MINUTE)));

// add the following line:
eval.setVariable("WEEK", make2Digits(date.get(Calendar.WEEK_OF_YEAR)));

return eval;
}

然后您应该能够按照说明重新编译 oozie

我会注意到您应该厌倦周数和年份并不总是很好地结合在一起 - 例如 2013 年的第 1 周实际上从 2012 年开始:

Tue Dec 25 11:11:52 EST 2012 : 2012 W 52
Wed Dec 26 11:11:52 EST 2012 : 2012 W 52
Thu Dec 27 11:11:52 EST 2012 : 2012 W 52
Fri Dec 28 11:11:52 EST 2012 : 2012 W 52
Sat Dec 29 11:11:52 EST 2012 : 2012 W 52
Sun Dec 30 11:11:52 EST 2012 : 2012 W 1 <= Here's your problem
Mon Dec 31 11:11:52 EST 2012 : 2012 W 1
Tue Jan 01 11:11:52 EST 2013 : 2013 W 1 <= 'Fixed' from here
Wed Jan 02 11:11:52 EST 2013 : 2013 W 1
Thu Jan 03 11:11:52 EST 2013 : 2013 W 1
Fri Jan 04 11:11:52 EST 2013 : 2013 W 1
Sat Jan 05 11:11:52 EST 2013 : 2013 W 1
Sun Jan 06 11:11:52 EST 2013 : 2013 W 2
Mon Jan 07 11:11:52 EST 2013 : 2013 W 2
Tue Jan 08 11:11:52 EST 2013 : 2013 W 2

由以下测试片段生成:

@Test
public void testDates() {
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));

cal.set(2012, 11, 25);

for (int x = 0; x < 15; x++) {
System.err.println(cal.getTime() + " : " + cal.get(Calendar.YEAR)
+ " W " + cal.get(Calendar.WEEK_OF_YEAR));

cal.add(Calendar.DAY_OF_YEAR, 1);
}
}

关于hadoop - 安排每周 Oozie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17492474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com