欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Oozie 自动retry和跳节点运行

程序员文章站 2022-03-04 21:29:28
...

对于一些Job,可能是由于临时的环境依赖关系,导致的调度失败。

比如说调用远程的WebService接口,Restful接口等。

或者是同步远程数据发生网络异常,这种情况,应该予以自动重跑。

 

在Oozie下面,是支持这样的操作的:

<workflow-app xmlns="uri:oozie:workflow:0.3" name="wf-name">
	<action name="a" retry-max="3" retry-interval="1">
</action>

 注意,这里的schema版本是0.3

retry-max 是最大尝试的次数,但是oozie本身有个最大可尝试的限额,以oozie本身的配置为主。

另外,

retry-interval 是每次尝试间隔的时间,单位是分钟,例子上面是失败后每1分钟尝试一次。

 

这里甚至可以配置Error Code,就是满足一定的错误条件才会进行自动重试。这里略过。

详情:http://oozie.apache.org/docs/3.1.3-incubating/DG_WorkflowReRun.html

----------分割线-------------------

oozie 的Coordinator里面,会产生很多的Action。

这些Action的本质,其实是一个workflow。

 

点开这些Action,在job id 上面可以找到对应的workflow。

使用这些workflow,就可以对现有的action进行按节点重跑。

#rerun workflow 必须指定 [oozie.wf.rerun.skip.nodes (逗号分隔符) OR oozie.wf.rerun.failnodes (true或false)]
oozie job -oozie http://xxxx:8080/oozie -config ./eshop_full2.properties -rerun 0000011-131209095421299-oozie-oozi-W -doas hduser -D oozie.wf.rerun.failnodes=false -D oozie.coord.application.path= 

可以手工指定跳过某些节点 如:

 -D oozie.wf.rerun.skip.nodes=ahhs_media_source_info,ahhs_product_info,city_info_table

 

Coordinator需要指定对应的oozie应用所在的hdfs路径:

oozie.coord.application.path=hdfs://127.0.0.1:9000/xxx/path/

 

Workflow也需要指定路径:

oozie.wf.application.path=hdfs://127.0.0.1:9000/xxx/path/

 

在运行job的时候,上面2个必须只能存在一个。

否则会报错:

protected static void ValidateAppPath(String wfPath, String coordPath, String bundlePath) throws XServletException {
        int n = 0;
        
        if (wfPath != null) {
            n ++;
        }
        
        if (coordPath != null) {
            n ++;
        }
        
        if (bundlePath != null) {
            n ++;
        }
        
        if (n == 0) {
            throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ErrorCode.E0302, "a workflow, coordinator, or bundle app path is required");
        }
        
        if (n != 1) {
            throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ErrorCode.E0302, "Multiple app paths specified, only one is allowed");
        }
    }

 源码如上:

 

所以,需要在提交job命令的时候,对另外一个路径进行覆盖:

使用

-D <property=value>   set/override value for given property

 

 

注意:

由于使用workflow的重跑机制,由Coordinator生成的参数会失效。

所以需要手工用-D 的方式手工指定日期参数或者路径参数。