文章目录
  1. Oozie-4_Coordinator定义
  2. 1. 简介
  3. 2. 时间和频率的配置
    1. 2.1 Cron syntax
  4. 3. Coordinator Application
    1. 3.1 Synchronous Datasets
    2. 3.2 Input Events 和 Output Events
    3. 3.3 Coordinator Action Execution Policies
    4. 3.4 Coordinator 每个属性的具体解释和例子
  5. 4. Parameterization of Coordinator Applications
    1. 4.1 Input and Output Events相关
    2. 4.2 Actions 相关
    3. 4.2 HCatalog 相关 (since Oozie 4.x)
  6. 5. Coordinator Job 的提交
    1. 5.1 Coordinator Job URI 回调
  7. 6. SLA Handling

Oozie-4_Coordinator定义

[TOC]

1. 简介

Coordinator Job通过配置Action来执行 Workflow Jobs。同时Coordinator Job还可以配置 触发时间触发频率数据集并发数 等配置。

语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<coordinator-app name="[NAME]" frequency="[FREQUENCY]" start="[DATETIME]" end="[DATETIME]" timezone="[TIMEZONE]" xmlns="uri:oozie:coordinator:0.1">
<controls>
<timeout>[TIME_PERIOD]</timeout>
<concurrency>[CONCURRENCY]</concurrency>
<execution>[EXECUTION_STRATEGY]</execution>
</controls>
<datasets>
<include>[SHARED_DATASETS]</include>
...
<!-- Synchronous datasets -->
<dataset name="[NAME]" frequency="[FREQUENCY]" initial-instance="[DATETIME]" timezone="[TIMEZONE]">
<uri-template>[URI_TEMPLATE]</uri-template>
</dataset>
...
</datasets>
<input-events>
<data-in name="[NAME]" dataset="[DATASET]">
<instance>[INSTANCE]</instance>
...
</data-in>
...
<data-in name="[NAME]" dataset="[DATASET]">
<start-instance>[INSTANCE]</start-instance>
<end-instance>[INSTANCE]</end-instance>
</data-in>
...
</input-events>
<output-events>
<data-out name="[NAME]" dataset="[DATASET]">
<instance>[INSTANCE]</instance>
</data-out>
...
</output-events>
<action>
<workflow>
<app-path>[WF-APPLICATION-PATH]</app-path>
<configuration>
<property>
<name>[PROPERTY-NAME]</name>
<value>[PROPERTY-VALUE]</value>
</property>
...
</configuration>
</workflow>
</action>
</coordinator-app>

2. 时间和频率的配置

  • Oozie使用时间如果是UTC格式,配置为:YYYY-MM-DDTHH:mmZ

例子:

EL Constant Value Example
${coord:minutes(int n)} n ${coord:minutes(45)} –> 45
${coord:hours(int n)} n * 60 ${coord:hours(3)} –> 180
${coord:days(int n)} variable ${coord:days(2)} –>
minutes in 2 full days from the current date
${coord:months(int n)} variable$ {coord:months(1)} –>
minutes in a 1 full month from the current date
${cron syntax} variable ${0,10 15 2-6} –>
a job that runs every weekday at 3:00pm and 3:10pm UTC time

Tips:

  1. ${coord:endOfDays(int n)}${coord:hours(int n)} 区别在与第一次触发是时间。前者是过n天触发,后者是立即触发。然后都是每n天执行一次。
  2. ${coord:endOfMonths(int n)} 类似

2.1 Cron syntax

  • Cron syntax 含有 5 个filed,分别是 minutes, hours, date of month, month, and day of week
Field name Allowed Values Allowed Special Characters
Minutes 0-59 , - * /
Hours 0-23 , - * /
Day-of-month 1-31 , - * ? / L W
Month 1-12 or JAN-DEC , - * /
Day-of-Week 1-7 or SUN-SAT , - * ? / L #

Examples:

Cron Expression Meaning
10 9 * Runs everyday at 9:10am
10,30,45 9 * Runs everyday at 9:10am, 9:30am, and 9:45am
0 * 30 JAN 2-6 Runs at 0 minute of every hour on weekdays and 30th of January
0/20 9-17 2-5 Runs every Mon, Tue, Wed, and Thurs at minutes 0, 20, 40 from 9am to 5pm
1 2 L-3 Runs every third-to-last day of month at 2:01am
1 2 6W 3 ? Runs on the nearest weekday to March, 6th every year at 2:01am
1 2 * 3 3#2 Runs every second Tuesday of March at 2:01am every year
0 10,13 MON-FRI Runs every weekday at 10am and 1pm

3. Coordinator Application

一个 Coordinator Application的生命周期:生命周期

3.1 Synchronous Datasets

Datasets 可以为Job的运行提供运算的数据,主要来源是 HDFS 上的目录和文件。Datasets 可以配置时间,周期,URI模板等信息。

语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<dataset name="[NAME]" frequency="[FREQUENCY]"
initial-instance="[DATETIME]" timezone="[TIMEZONE]">
<uri-template>[URI TEMPLATE]</uri-template>
<done-flag>[FILE NAME]</done-flag>
</dataset>

# initial-instance:数据集实例初始化的时间
# uri-template:数据集的URI,URI中可以包括 常量 和 变量
- constants:包含 YEAR, MONTH,DAY,HOUR 以及 MINUTE 常量。如 ${YEAR}/${MONTH}
- variables:启动Job配置的参数(properties),如 ${market}/${language}
# done-flag:表示这个数据集被消费的标志
- 如果省略标签:只有当当前目录下存在 _SUCCESS 文件时
- 如果标签内容为空:只有当当前的目录存在,数据集才会被消费
- 如果存在内容:表明只有当当前目录下存在改文件的时候,数据集才会被消费

3.2 Input Events 和 Output Events

指定要进行输入和输出的数据集实例。

3.3 Coordinator Action Execution Policies

可以指定的一些执行策略:

  • Timeout:设置 WAITING 和 READY的超时时间
  • Concurrency:设置 RUNNING 状态Action执行的并发数
  • Execution strategy:当多个Action累积起来的时候,Actions的执行策略。值可以是’oldest first’, ‘newest first’, ‘none’ and ‘last one only’
  • Throttle:指定同时 WAITING 的 Action 的数量(阈值)

3.4 Coordinator 每个属性的具体解释和例子

Coordinator 每个属性的具体解释和例子

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<coordinator-app name="hello2-coord" frequency="${coord:days(7)}"
start="2009-01-07T24:00Z" end="2009-12-12T24:00Z"
timezone="UTC"
xmlns="uri:oozie:coordinator:0.1">
<datasets>
<dataset name="logs" frequency="${coord:days(1)}"
initial-instance="2009-01-01T24:00Z" timezone="UTC">
<uri-template>hdfs://bar:8020/app/logs/${YEAR}/${MONTH}/${DAY}</uri-template>
</dataset>
<dataset name="weeklySiteAccessStats" frequency="${coord:days(7)}"
initial-instance="2009-01-07T24:00Z" timezone="UTC">
<uri-template>hdfs://bar:8020/app/weeklystats/${YEAR}/${MONTH}/${DAY}</uri-template>
</dataset>
</datasets>
<input-events>
<data-in name="input" dataset="logs">
<start-instance>${coord:current(-6)}</start-instance>
<end-instance>${coord:current(0)}</end-instance>
</data-in>
</input-events>
<output-events>
<data-out name="output" dataset="weeklySiteAccessStats">
<instance>${coord:current(0)}</instance>
</data-out>
</output-events>
<action>
<workflow>
<app-path>hdfs://bar:8020/usr/joe/logsprocessor-wf</app-path>
<configuration>
<property>
<name>wfInput</name>
<value>${coord:dataIn('input')}</value>
</property>
<property>
<name>wfOutput</name>
<value>${coord:dataOut('output')}</value>
</property>
</configuration>
</workflow>
</action>
</coordinator-app>

# 1. 定义了一个名称为 hello2-coord 的 Coordinator Job, 开始时间为start,结束时间为end,执行频率为frequency(7天)。
# 2. 定义了两个数据集,一个名称为 logs, 一个为 weeklySiteAccessStats
- logs:数据集初始化的时间为initial-instance,然后每一天收集记录一次。其实也就是讲存在于HDFS上的目录记录了下来。
- weeklySiteAccessStats:同理,每7天记录一次。
# 3. input-events:输入的数据指向 logs 的数据集,收集的数据是(6天前-今天)的数据集合,最后将整个数据集提供给 wfInput 作为输入的数据目录,然后可以供 workflow app去处理。
# 4. output-events:输出的数据指向 weeklySiteAccessStats 的数据集,数据集实例表示当前的数据集。最后提供给 wfOutput 作为输出的目录。

以上整理意思大概就是每天记录输入的数据集实例,然后每个星期处理一次放到输出的数据集实例中。

4. Parameterization of Coordinator Applications

  • coord:dateOffset(String baseDate, int instance, String timeUnit)
  • coord:formatTime(String ts, String format)

参考:https://oozie.apache.org/docs/4.1.0/CoordinatorFunctionalSpec.html#a6.9._Parameterization_of_Coordinator_Application

4.1 Input and Output Events相关

  • coord:current(int n)
  • coord:offset(int n, String timeUnit)
  • coord:hoursInDay(int n)
  • coord:daysInMonth(int n)
  • coord:tzOffset()
  • coord:latest(int n)
  • coord:future(int n, int limit)
  • coord:absolute(String timeStamp)

参考:https://oozie.apache.org/docs/4.1.0/CoordinatorFunctionalSpec.html#a6.6._Parameterization_of_Dataset_Instances_in_Input_and_Output_Events

4.2 Actions 相关

  • coord:dataIn(String name)
  • coord:dataOut(String name)
  • coord:nominalTime()
  • coord:actualTime()
  • coord:user()

参考:https://oozie.apache.org/docs/4.1.0/CoordinatorFunctionalSpec.html#a6.7._Parameterization_of_Coordinator_Application_Actions

4.2 HCatalog 相关 (since Oozie 4.x)

  • coord:databaseIn(String name), coord:databaseOut(String name)
  • coord:tableIn(String name), coord:tableOut(String name)
  • coord:dataInPartitionFilter(String name, String type)
  • coord:dataOutPartitions(String name)
  • coord:dataInPartitionMin(String name, String partition)
  • coord:dataInPartitionMax(String name, String partition)
  • coord:dataOutPartitionValue(String name, String partition)
  • coord:dataInPartitions(String name, String type)

参考:https://oozie.apache.org/docs/4.1.0/CoordinatorFunctionalSpec.html#a6.8_Using_HCatalog_data_instances_in_Coordinator_Applications_since_Oozie_4.x

5. Coordinator Job 的提交

上传到 HDFS,job.properties中必须指定 oozie.coord.application.path 的路径。

5.1 Coordinator Job URI 回调

指定 oozie.coord.workflow.notification.url 属性设置回调url,当coordinator job中的Action状态发生变化时,进行回调。

参考:Coordinator Job URI 回调

6. SLA Handling

文章目录
  1. Oozie-4_Coordinator定义
  2. 1. 简介
  3. 2. 时间和频率的配置
    1. 2.1 Cron syntax
  4. 3. Coordinator Application
    1. 3.1 Synchronous Datasets
    2. 3.2 Input Events 和 Output Events
    3. 3.3 Coordinator Action Execution Policies
    4. 3.4 Coordinator 每个属性的具体解释和例子
  5. 4. Parameterization of Coordinator Applications
    1. 4.1 Input and Output Events相关
    2. 4.2 Actions 相关
    3. 4.2 HCatalog 相关 (since Oozie 4.x)
  6. 5. Coordinator Job 的提交
    1. 5.1 Coordinator Job URI 回调
  7. 6. SLA Handling