oozie bundle学习笔记

oozie已经用了一段时间,但是只用到coordinator级别,还没用过bundle,今天研究了一下,也可以参考oozie手册学习一下,地址:http://cs-achelous-client-15793.hadoop.jd.com:11000/oozie/docs/BundleFunctionalSpec.html

1、首先bundle是控制一个或者多个coordinator的工具,即一次可以控制一个或者多个工作流调度的执行,下面简单做了一个例子测试,先上代码:

bundle.xml

<bundle-app name='scale_bundle_b'  xmlns='uri:oozie:bundle:0.1'> 
   <controls>
       <kick-off-time>${kickOffTime}</kick-off-time>
  </controls>
   <coordinator name='coord1'>
       <app-path>${nameNode}/user/${userName}/oozie/workflow/rebate/batchCalc/scaleCalcRebate/po/coordinator.xml</app-path>
          <configuration>
            <property>
              <name>start</name>
              <value>${start}</value>
            </property>
            <property>
              <name>end</name>
              <value>${end}</value>
            </property>
         </configuration>
   </coordinator>
</bundle-app>  

2、job.properties.xml:

nameNode=
jobTracker=
queueName=
examplesRoot=oozie/workflow/rebate/apps/bundle
userName=${user.name}
outputDir=bundle

oozie.libpath=/user/${user.name}/share/lib

oozie.bundle.application.path=${nameNode}/user/${user.name}/${examplesRoot}
kickOffTime=2016-01-01T01:00Z
start=2016-01-01T01:00Z
end=2017-01-01T03:00Z

3、可以看到bundle的app-path属性配置了coordinator的位置,其中coordinator的内容如下:

<coordinator-app name="aggregator-coord" frequency="${coord:hours(1)}" start="${start}" end="${end}" timezone="UTC" xmlns="uri:oozie:coordinator:0.2">
    <controls>
        <concurrency>1</concurrency>
    </controls>

    <action>
        <workflow>
            <app-path>${nameNode}/user/${coord:user()}/oozie/workflow/rebate/batchCalc/scaleCalcRebate/po</app-path>
            <configuration>
                <property>
                    <name>jobTracker</name>
                    <value>${jobTracker}</value>
                </property>
                <property>
                    <name>nameNode</name>
                    <value>${nameNode}</value>
                </property>
                <property>
                    <name>queueName</name>
                    <value>${queueName}</value>
                </property>
            </configuration>
        </workflow>
    </action>
</coordinator-app>

其中frequecy指定了该工作流调度的频率,即1个小时

4、在使用过程中,发现一个问题就是比如跑工作流过程中用到了配置的参数变量,比如${importPath},该变量的值是在job.properties里配置的,如果用bundle起的话工作流是读取不到这个变量,会报获取不到该变量的错误信息,如果把该变量的

定义放到config-default.xml里就可以读取到,可能bundle默认会加载这个文件吧,或者直接在coordinator.xml文件里配置也行,反正放在job.prioperties是不行的,可能job.properties只有在单个启动工作流的时候才会把job.properties的内容加载到

oozie的配置信息里

先总结这些吧,懂得更多的同学可以留言交流哦~

posted @ 2016-06-02 18:54  风儿飞  阅读(1286)  评论(0编辑  收藏  举报