oozie已经用了一段时间,但是只用到coordinator级别,还没用过bundle,今天研究了一下,也可以参考oozie手册学习一下,地址:http://cs-achelous-client-15793.hadoop.jd.com:11000/oozie/docs/BundleFunctionalSpec.html
1、首先bundle是控制一个或者多个coordinator的工具,即一次可以控制一个或者多个工作流调度的执行,下面简单做了一个例子测试,先上代码:
bundle.xml
${kickOffTime} ${nameNode}/user/${userName}/oozie/workflow/rebate/batchCalc/scaleCalcRebate/po/coordinator.xml start ${start} end ${end}
2、job.properties.xml:
nameNode=jobTracker=queueName=examplesRoot=oozie/workflow/rebate/apps/bundleuserName=${user.name}outputDir=bundleoozie.libpath=/user/${user.name}/share/liboozie.bundle.application.path=${nameNode}/user/${user.name}/${examplesRoot}kickOffTime=2016-01-01T01:00Zstart=2016-01-01T01:00Zend=2017-01-01T03:00Z
3、可以看到bundle的app-path属性配置了coordinator的位置,其中coordinator的内容如下:
1 ${nameNode}/user/${coord:user()}/oozie/workflow/rebate/batchCalc/scaleCalcRebate/po jobTracker ${jobTracker} nameNode ${nameNode} queueName ${queueName}
其中frequecy指定了该工作流调度的频率,即1个小时
4、在使用过程中,发现一个问题就是比如跑工作流过程中用到了配置的参数变量,比如${importPath},该变量的值是在job.properties里配置的,如果用bundle起的话工作流是读取不到这个变量,会报获取不到该变量的错误信息,如果把该变量的
定义放到config-default.xml里就可以读取到,可能bundle默认会加载这个文件吧,或者直接在coordinator.xml文件里配置也行,反正放在job.prioperties是不行的,可能job.properties只有在单个启动工作流的时候才会把job.properties的内容加载到
oozie的配置信息里
先总结这些吧,懂得更多的同学可以留言交流哦~