温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
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实操