如何配置oozie job.properties以在特定时间跳过作业?

时间:2015-10-23 11:14:39

标签: hadoop mapreduce oozie oozie-coordinator

我创造了一份工作,我每60分钟使用oozie来运行它。但是,我想在特定时间跳过工作的执行。可以说,我的工作从早上10点到晚上7点。我想在下午2点和下午4点跳过工作。如何配置这些值?

这是我的job.properties文件的片段

nameNode=hdfs://localhost:8020
jobTracker=localhost:8032
jobName=MyJob
userName=${user.name}

oozie.coord.application.path=${nameNode}/user/${userName}/oozie/${jobName}
appPath=${oozie.coord.application.path}

oozie.libpath=/lib
oozie.use.system.libpath=true

timezone=UTC
start=2015-09-01T01:00Z
end=2015-09-04T02:00Z

以下是我的coordinator.xml文件的片段

<coordinator-app name="${jobName}" frequency="${jobFrequency}"
                 start="${start}" end="${end}" timezone="${timezone}" xmlns="uri:oozie:coordinator:0.4">
    <controls>
        <timeout>${timeout}</timeout>
        <concurrency>1</concurrency>
        <throttle>1</throttle>
    </controls>
</coordinator-app>

这个工作从每月的第1个到第4个每小时运行一次。如何在特定时间跳过作业执行?我可以通过某种方式对其进行配置吗?我使用此页面作为参考。 http://www.dummies.com/how-to/content/scheduling-and-coordinating-oozie-workflows-in-had.html

1 个答案:

答案 0 :(得分:0)

您可以尝试使用Decision Control Node跳过某些执行。可以根据coord:nominalTime()

的结果做出决定

coordinator.xml中的协调员操作:

<action>
    <workflow>
        ...
        <configuration>
            <property>
                <name>nominalHour</name>
                <value>${coord:formatTime(coord:nominalTime(), 'HH')}</value>
            </property>
        </configuration>
    </workflow>
</action>

workflow.xml中的决策控制节点:

...
<decision name="need-run">
    <switch>
        <case to="skip-run">${nominalHour eq '14'}</case>
        <case to="skip-run">${nominalHour eq '16'}</case>
        <default to="run-my-job"/>
    </switch>
</decision> 
...