Oozie 自动retry和跳节点运行

对于一些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 的方式手工指定日期参数或者路径参数。

 

 

 

 

 

你可能感兴趣的:(workflow,oozie,retry,Coordinator)