Oozie coordinator 作业自定义的配置的一些方法

简介:

Oozie的coordinator有啥用?

The Oozie Coordinator system allows the user to define and execute recurrent and interdependent workflow jobs (data application pipelines).

说白了就是可以把各个 workflow作业组织起来。比如,A作业执行完成之后,会有输出,该输出触发B作业的执行。那么 A B 这两个workflow作业就可以通过一个coordinator作业组织起来。

什么是coordinator作业?

Coordinator Job: A coordinator job is an executable instance of a coordination definition. A job submission is done by submitting a job configuration that resolves all parameters in the application definition.

这说明coordinator作业也是需要配置相应的参数的。与提交workflow作业时配置 workflow.xml类似,coordinator作业也有一个名为coordinator.xml的配置文件。

什么是coordinator action?

 

Coordinator Action: A coordinator action is a workflow job that is started when a set of conditions are met (input dataset instances are available).

coordinator action本质上是一个workflow 作业!

Coordinator Application: A coordinator application defines the conditions under which coordinator actions should be created (the frequency) and when the actions can be started. The coordinator application also defines a start and an end time. Normally, coordinator applications are parameterized. A Coordinator application is written in XML.

coordinator application 负责管理各个coordinator action。有start time 和 end time,负责其中定义的action的起动与终止。

前面一直在纠结这个问题:oozie coordinator 作业如何配置???
现在记录如下:
Oozie提供的一个官方的关于定时作业配置文件,内容如下:

复制代码
<coordinator-app name="cron-coord" frequency="${coord:minutes(10)}" start="${start}" end="${end}" timezone="UTC"
                 xmlns="uri:oozie:coordinator:0.2">
        <action>
        <workflow>
            <app-path>${workflowAppUri}</app-path>
            <configuration>
                <property>
                    <name>jobTracker</name>
                    <value>${jobTracker}</value>
                </property>
                <property>
                    <name>nameNode</name>
                    <value>${nameNode}</value>
                </property>
            </configuration>
        </workflow>
    </action>
</coordinator-app>
复制代码


从上面可以看出, frequency已经写死了,指定为每十分钟执行一次。其中启动时间和结束时间以变量的形式给出,如start=" s t a r t " e n d =" {end}"
这两个变量可以通过job.properties 文件或者在命令行提交时指定参数即可。此外,还可以通过HTTP POST请求的形式,带着相关的参数进行作业提交(Oozie 提供了WebService API。)

其实,frequency和 start、end 一样,也可以用变量来代替,这样就可以实现我前面帖子里面的问题了---定时提交作业,且只运行一次。
但是,需要注意的是 frequency的格式问题:它只能是 cron expression。否则就会报以下的错误:
Invalid coordinator application attributes, parameter [frequency] = [10 * ? ? ?]  must be an integer or a cron syntax. Parsing error For input string: "10 * ? ? ?"
关于 cron expression可以参考Quartz,因为Oozie的定时功能是基于它实现的。
此外,我还碰到了一个这样的问题:
Coordinator job with frequency '10 * * * *' materializes no actions between start and end time.
从Oozie的源代码可以看出,抛出该异常的程序代码如下:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
if (nextTime == null) {
        throw new IllegalArgumentException("Invalid coordinator cron frequency: " + coordJob.getFrequency());
     }
        if (!nextTime.before(coordJob.getEndTime())) {
            throw new IllegalArgumentException("Coordinator job with frequency '" +
                coordJob.getFrequency() + "' materializes no actions between start and end time.");
 }
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
这是因为我的start time 和 end time设置的不合理,下一次作业的运行时间在结束时间之前了,就会出现下面的错误。
Coordinator job with frequency '10 * * * *' materializes no actions between start and end time. 

 

文章开头说了Coordinator作业可以把其他作业组织起来。因此,提交一个Coordinator作业时,会生成一个 父作业ID 和 若干子作业的ID,子作业就是Coordinator作业的配置文件中的 <workflow>标签中指定的子作业。比如:

生成的一个父作业ID:0000033-160516121313115-oozie-oozi-C

相应的子作业ID:0000033-160516121313115-oozie-oozi-C@1

由于该子作业是一个workflow作业,workflow作业的ID:0000034-160516121313115-oozie-oozi-W



另外,相关的具体规则可参考Oozie官网文档

本文转自hapjin博客园博客,原文链接:http://www.cnblogs.com/hapjin/p/5329823.html,如需转载请自行联系原作者


相关文章
|
运维 监控 算法
从定时任务-到任务调度系统xxl-job
定时任务的今生前世以及xxl-job调度系统
2899 0
从定时任务-到任务调度系统xxl-job
|
设计模式 算法 安全
实时操作系统(RTOS)深度解析及Java实现初探
【10月更文挑战第22天】实时操作系统(RTOS,Real-Time Operating System)是一种能够在严格的时间限制内响应外部事件并处理任务的操作系统。它以其高效、高速、可靠的特点,广泛应用于工业自动化、航空航天、医疗设备、交通控制等领域。本文将深入浅出地介绍RTOS的相关概念、底层原理、作用与功能,并探讨在Java中实现实时系统的方法。
560 1
【qt】 QGridLayout布局管理器怎么用?
【qt】 QGridLayout布局管理器怎么用?
580 0
|
11月前
|
存储 JSON 安全
GraphQL 中的权限与认证:一分钟浅谈
本文介绍了GraphQL中权限与认证的基础概念、实现方法及常见问题。通过JWT认证和基于角色的授权示例,详细展示了如何在GraphQL中实现安全的API访问控制,同时指出了一些常见的易错点及其避免方法。
236 5
|
块存储
ceph集群的OSD设备扩缩容实战指南
这篇文章详细介绍了Ceph集群中OSD设备的扩容和缩容过程,包括如何添加新的OSD设备、如何准备和部署,以及如何安全地移除OSD设备并从Crushmap中清除相关配置。
615 4
|
SQL 消息中间件 Kafka
实时计算 Flink版产品使用问题之如何进行数据校验和订正
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
安全 Java API
Java一分钟之-GraphQL:查询语言与API设计
【6月更文挑战第11天】GraphQL,一种革命性的查询语言,正在改变Web开发中的API构建和使用方式。它允许客户端按需请求数据,减少冗余,提升性能。本文概述了GraphQL的核心理念,如声明式查询、强类型和统一入口,并讨论了Java开发者常遇问题:过度查询、Schema设计和安全性。解决方案包括使用Dataloader、优化Schema和实现授权机制。通过理解原理、关注性能、重视安全和持续实践,开发者能更好地利用GraphQL构建高效API。
645 2
|
SQL Java Shell
Apache Oozie- 实战操作一串联任务调度(依赖关系)|学习笔记
快速学习 Apache Oozie- 实战操作一串联任务调度(依赖关系),在实际工作中,可能会存在很多任务模块,这些模块都会存在一定的关系,比如说一件事大概有 ABC 三个模块,在 A 得出的结果作为结果输入,A 传出 B,B 再作为结果传出 C,这样就形成了一个串联任务,在 oozie 当中,配置多个 action, 可以实现多个任务之间的相互依赖关系。 比如说一个简单需求,首先执行一个 shell 程序,shell 执行完之后再执行 MR 程序,最后执行 hive 程序,三者之间形成一个首尾相连的串联,看一下具体怎么操作。
Apache Oozie- 实战操作一串联任务调度(依赖关系)|学习笔记
|
Cloud Native Linux Go
Go 编程语言详解:用途、特性、与 Python 和 C++ 的比较
Go是一个跨平台、开源的编程语言 Go可用于创建高性能应用程序 Go是一种快速、静态类型、编译型语言,感觉上像动态类型、解释型语言 Go由Robert Griesemer、Rob Pike和Ken Thompson于2007年在Google开发 Go的语法类似于C ++
389 0
|
存储 Unix 编译器
猿创征文|C语言操作符(运算符)一万多字的详细解析
猿创征文|C语言操作符(运算符)一万多字的详细解析