前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Oozie中创建有依赖的WorkFlow

如何在Oozie中创建有依赖的WorkFlow

作者头像
Fayson
发布2018-07-12 15:25:05
6.4K2
发布2018-07-12 15:25:05
举报
文章被收录于专栏:Hadoop实操Hadoop实操

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

Fayson的github: https://github.com/fayson/cdhproject

提示:代码块部分可以左右滑动查看噢

1.文档编写目的


在使用Hue创建WorkFlow时,单个WorkFlow中可以添加多个模块的依赖,使各个模块之间在WorkFlow内产生依赖关系,如果对于一个WorkFlow被其它多个WorkFlow依赖(如:AWorkFlow执行成功后,BWorkFlow和CWorkFlow依赖AWorkFlow的执行结果),这时不可能将AWorkFLow作为BWorkFlow和CWorkFlow中的一个处理模块来,这样会重复执行AWorkFlow,可能会导致输入BWorkFlow和CWorkFlow的输入不一致等问题,那本篇文章Fayson主要介绍如何使用Oozie的Coordinator功能来实现WorkFlow之间的依赖。

  • 内容概述:

1.环境准备

2.创建测试WorkFlow与Coordinator

3.WorkFlow依赖测试

4.总结

  • 测试环境:

1.CM5.14.3/CDH5.14.2

2.操作系统版本为Redhat7.3

3.采用root用户进行操作

4.集群已启用Kerberos

2.环境准备


1.由于是Kerberos环境,在shell脚本中需要一个keytab,生成一个hiveadmin.keytab文件

代码语言:javascript
复制
[root@cdh01 ~]# kadmin.local
Authenticating as principal hbase/admin@FAYSON.COM with password.
kadmin.local:  xst -norandkey -k hiveadmin.keytab hive/admin@FAYSON.COM

(可左右滑动)

使用klist命令查看导出的keytab文件是否正常

代码语言:javascript
复制
[root@cdh02 wordcount]# klist -ek hiveadmin.keytab

(可左右滑动)

2.准备两个shell脚本用于创建两个WorkFlow

generator_wordcount.sh脚本内容如下:

代码语言:javascript
复制
#!/bin/bash

kinit -kt hiveadmin.keytab hive/admin@FAYSON.COM
INPUT_HDFS=/benchmarks/wordcount/input
DATASIZE=1073741824
hadoop fs -rmr ${INPUT_HDFS} || true
hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar randomtextwriter -Dmapreduce.randomtextwriter.totalbytes=${DATASIZE} ${INPUT_HDFS}

(可左右滑动)

wordcount.sh脚本内容如下:

代码语言:javascript
复制
#!/bin/bash

kinit -kt hiveadmin.keytab hive/admin@FAYSON.COM
INPUT_HDFS=/benchmarks/wordcount/input
OUTPUT_HDFS=/benchmarks/wordcount/output
hadoop fs -rmr $OUTPUT_HDFS
NUM_REDS=160
hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar wordcount \
    -Dmapreduce.input.fileinputformat.split.minsize=1073741824 \
    -Dmapreduce.reduce.tasks=${NUM_REDS} \
    ${INPUT_HDFS} ${OUTPUT_HDFS}
hadoop fs -rmr ${INPUT_HDFS}

(可左右滑动)

3.创建测试WorkFlow


这里创建Shell类型的Oozie工作流就不再详细的说明,可以参考Fayson前面的文章《Hue中使用Oozie创建Shell工作流在脚本中切换不同用户》中有介绍如何创建一个shell类型的Oozie工作流,这里需要注意的是Kerberos环境下,我们需要将keytab文件也上传至对应WorkFlow的WorkSpace/lib目录下,如下图所示:

1.创建一个GeneratorWorkFlow

2.创建一个WordCountWorkFlow

这两个WorkFlow的依赖关系,只有GeneratorWorkFlow执行成功,生成了WordCount的输入数据后,WordCountWorkFlow才可以执行,否则WordCountWorkFlow一直处于等待状态。

4.创建Coordinator


在Hue中创建Oozie的Coordinator即对应Hue中的功能为Scheduler

1.先创建一个生成数据的Coordinator,用于定时生成WordCount测试数据

2.创建一个WordCountSchedule,用于定时的去执行WordCount作业

注意:下面的配置比较关键,通过对GeneratorWorkflow工作流输出的/benchmarks/wordcount/input目录进行判断,如果满足条件则执行WordCountWorkFlow工作流。

完成上述两个Schedule的创建后,保存配置并启动该Schedule。

5.WorkFlow依赖测试


1.点击Jobs可以看到如下两个正在运行的WorkFlow

2.通过Yarn查看作业的执行情况,这里的作业已经执行成功了,我们通过时间来分析

3.通过GeneratorWorkflow工作流的作业执行情况可以看到

在2018-06-10 23:10:00看到GeneratorWorkflow向集群提交了作业,与我们定义的启动时间一致,到2018-06-10 23:10:14可以看到开始执行生成数据的MR作业,并成功执行,作业执行结束时间为2018-06-10 23:10:34。

4.通过WordCountWorkFlow工作流的作业执行情况可以看到

在2018-06-10 23:11:00才启动WordCountWorkFlow工作流,本应该在2018-06-10 23:03:00执行的工作流一致处于等待状态,直到2018-06-10 23:11:00GeneratorWorkflow工作流执行成功,生成了/benchmarks/wordcount/input目录的数据后,WordCountWorkFlow工作流才开始执行,可以看到WordCount作业的开始执行时间为2018-06-10 23:11:14 ,在生成了WordCount测试数据后才执行。GeneratorWorkflow工作流执行成功后与WordCountWorkFlow的执行时间间隔为1分钟,即为我们在WordCountSchedule中配置的每个一分钟检查一次。

5.通过如上作业执行情况分析,可以得出WordCountWorkFlow工作流的执行是依赖GeneratorWorkflow工作流

6.总结


1.在创建有依赖关系的WorkFlow时,我们可以通过Coordinator的方式来是实现工作流之间的依赖关系,可以避免被依赖的WorkFlow工作流被重复执行。

2.Coordinator是一个定时执行WorkFlow的调度工具,可以基于时间与数据生成为条件的方式触发。

3.Coordinator指定HDFS的数据目录,可以使用${YEAR}、${MONTH}等EL表达式的方式进行设置。

4.done_flag即为数据目录生成的文件标识,若未指定则默认为_SUCCESS文件,若指定为空,则表示文件夹本身。

提示:代码块部分可以左右滑动查看噢

为天地立心,为生民立命,为往圣继绝学,为万世开太平。 温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
专用宿主机
专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档