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="${start}"  end="${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.

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

时间: 2024-10-19 13:50:37

Oozie coordinator 作业自定义的配置的一些方法的相关文章

Apache Oozie Coordinator 作业自定义配置定时任务

一,介绍 Oozie是Hadoop的工作流系统,如果使用Oozie来提交MapReduce作业(Oozie 不仅仅支持MapReduce作业,还支持其他类型的作业),可以借助Oozie Coordinator 作业来实现定时运行. 对于Oozie的作业而言,在它提交给Hadoop之前首先需要部署好.即,将配置文件(定时作业是coordinator.xml,workflow作业则是workflow.xml).可执行的jar文件.还有待处理的输入数据上传到HDFS上. 一个典型的workflow作业

oozie coordinator 定时调度

  coordinator application: coordinator application是在满足一组条件时触发动作(通常是工作流作业)的程序.条件可以是时间频率.新数据集实例或其他外部事件.  coordinator application的类型:同步:它的协调器动作是在指定的时间间隔创建的,通常是参数化的.  coordinator job: 要创建一个coordinator job,必须向协调器引擎提供解决所有coordinator application参数的作业配置. coo

springCloud(8):Ribbon实现客户端侧负载均衡-自定义Ribbon配置

一.简介 很多场景下,可能根据需要自定义的Ribbon的配置,例如修改Ribbon的负载均衡规则等.Spring cloud Camden允许使用Java代码或属性自定义Ribbon的配置. 二.使用Java代码自定义Ribbon配置 在Spring cloud中,Ribbon的默认配置如下,格式是:BeanType beanName:ClassName 1.IClientConfig ribbonClientConfig:DefaultClientConfigImpl 2.IRule ribb

手把手教你完成MaxCompute JDBC自定义日志配置

注:MaxCompute原名ODPS,是阿里云自研的大数据计算平台,文中出现的MaxCompute与ODPS都指代同一平台,不做区分 与MaxCompute JDBC相关的日志有两种,一种是由JDBC内部代码直接输出的日志,第二种是JDBC抛出异常后,由调用JDBC API的宿主应用捕获后输出的.由于第二类日志取决于宿主应用如何处理异常及如何配置日志体系,所以本文主要讨论的对象是第一种日志. 在2.0-beta之前,MaxCompute JDBC的日志只会输出到命令行终端(标准输出流),它底层使

【.net 深呼吸】自定义缓存配置(非Web项目)

在前一篇烂文中,老周简单讲述了非Web应用的缓存技术的基本用法.其实嘛,使用系统默认方案已经满足我们的需求了,不过,如果你真想自己来配置缓存,也是可以的. 缓存的自定义配置可以有两种方案,一种是用代码在应用程序中配置,即实例化MemoryCache对象时,可以向构造函数传递一个NameValueCollection实例,数据结构就是key-value形式,这些配置项的名字其实就是MemoryCacheElement类的以下三个属性:CacheMemoryLimitMegabytes.Physic

微信公众平台新增获取自动回复和自定义菜单配置接口

微信公众平台自动回复功能可以为运营者减少了重复回复消息的次数,但如果自动回复的数量多的话管理就比较麻烦:自定义菜单相当于你这个公众号的导航,但有些公众号会限制不能添加外部链接.现在好了,公众平台开发者接口更新,新增获取自动回复和自定义菜单配置接口,对所有公众号开放. 新增的接口具体是: 1. 获取自动回复规则接口 该接口可以获取公众号设置的自动回复规则,包括关注后自动回复.消息自动回复和关键词自动回复. 开发者可以通过该接口,获取公众号当前使用的自动回复规则,包括关注后自动回复.消息自动回复(6

SpringCloud系列五:Ribbon 负载均衡(Ribbon 基本使用、Ribbon 负载均衡、自定义 Ribbon 配置、禁用 Eureka 实现 Ribbon 调用)

1.概念:Ribbon 负载均衡 2.具体内容 现在所有的服务已经通过了 Eureka 进行了注册,那么使用 Eureka 注册的目的是希望所有的服务都统一归属到 Eureka 之中进 行处理,但是现在的问题,所有的微服务汇集到了 Eureka 之中,而客户端的调用也应该通过 Eureka 完成.而这种调用就可以利用 Ribbon 技术来实现. Ribbon 是一个服务调用的组件,并且是一个客户端实现负载均衡处理的组件.服务器端实现负载均衡可以使用 Nginx. HAProxy.LVS 等. 2

Feign自定义编程配置

1.Feign自定义编程配置入门  2.Feign自定义配置详解 原文地址:https://www.cnblogs.com/linjiqin/p/10188118.html

详解Springboot中自定义SpringMVC配置

详解Springboot中自定义SpringMVC配置 WebMvcConfigurer接口 ? 这个接口可以自定义拦截器,例如跨域设置.类型转化器等等.可以说此接口为开发者提前想到了很多拦截层面的需求,方便开发者自由选择使用.由于Spring5.0废弃了WebMvcConfigurerAdapter,所以WebMvcConfigurer继承了WebMvcConfigurerAdapter大部分内容. WebMvcConfigurer接口中的方法 举例1:configurePathMatch配置