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

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

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文件

[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文件是否正常

[root@cdh02 wordcount]# klist -ek hiveadmin.keytab

(可左右滑动)

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

generator_wordcount.sh脚本内容如下:

#!/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脚本内容如下:

#!/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实操

原文发布于微信公众号 - Hadoop实操(gh_c4c535955d0f)

原文发表时间:2018-06-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Hadoop实操

CDH内存调拨过度警告分析

Hadoop应用程序或者Yarn的作业随机的出现OutOfMemory(OOM),在Cloudera Manager界面显示如下警告:

1.3K11
来自专栏Hadoop实操

如何使用StreamSets实现MySQL中变化数据实时写入Kudu

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproje...

1.6K11
来自专栏JackieZheng

学习Spark——环境搭建(Mac版)

大数据情结 还记得上次跳槽期间,与很多猎头都有聊过,其中有一个猎头告诉我,整个IT跳槽都比较频繁,但是相对来说,做大数据的比较“懒”一些,不太愿意动。后来在一篇...

1.3K8
来自专栏架构师小秘圈

HDFS极简教程

HDFS(Hadoop Distributed File System )Hadoop分布式文件系统。是根据google发表的论文翻版的。论文为GFS(Goog...

3546
来自专栏我是攻城师

如何管理Spark Streaming消费Kafka的偏移量(一)

7437
来自专栏Hadoop实操

如何使用Nginx实现Impala负载均衡

在使用Impala JDBC连接Impala服务时,默认是不带负载均衡的,但一个Impala Daemon很可能会产生单点的问题,这里我们就需要考虑Impala...

5448
来自专栏熊二哥

Hadoop快速入门

传说中的Hadoop,我终于来对着你唱"征服"了,好可爱的小象,!J 总的来说,hadoop的思路比较简单(map-reduce),就是将任务分开进行,最后汇总...

9206
来自专栏Spark学习技巧

必读:再讲Spark与kafka 0.8.2.1+整合

Kafka在0.8和0.10版本引入了新的消费者API,所以spark Streaming与kafka的整合提供了两个包。 请根据你的集群选用正确的包。注意,...

4217
来自专栏绿巨人专栏

Spark集群 + Akka + Kafka + Scala 开发(2) : 开发一个Spark应用

2515
来自专栏Hadoop实操

如何在CDH集群外配置Kerberos环境的Spark2和Kafka客户端环境

2463

扫码关注云+社区

领取腾讯云代金券