1.概述

  在《高可用Hadoop平台-Oozie工作流》一篇中,给大家分享了如何去单一的集成Oozie这样一个插件。今天为大家介绍如何去使用Oozie创建相关工作流运行与Hadoop上,已经在创建过程当中需要注意的事项,下面是今天的分享目录:

  • Oozie简介
  • 任务工作流
  • 截图预览

  下面开始今天的内容分享。

2.Oozie简介

  在Oozie中有几个重要的概念,他们分别是:

  • WorkFlow:工作流,控制工作流的开始和结束过程,以及工作流Job的执行路径,并提供一种机制来控制工作流执行路径(比如:Decision、Fork以及Join节点等),其书写方式如下所示:
<workflow-app name="[WF-DEF-NAME]" xmlns="uri:oozie:workflow:0.1">...省略详细内容...
</workflow-app>

  • Coordinator:多个WorkFlow可以组成一个Coordinator,可以把前几个WorkFlow的输出作为后一个WorkFlow的输入,当然也可以定义WorkFlow的触发条件,来做定时触发,其书写方式如下所示:
<coordinator-app name="[CD-DEF-NAME]" frequency="${coord:minutes(10)}" start="${start}" end="${end}" timezone="GMT+0800"xmlns="uri:oozie:coordinator:0.1"><action><workflow><app-path>${workflowAppUri}</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><action><workflow>...</workflow></action>
</coordinator-app>

  • Bundle:控制一个或多个Coordinator应用,其写法如下所示:
 <bundle-app name=[NAME]  xmlns='uri:oozie:bundle:0.1'> <controls><kick-off-time>[DATETIME]</kick-off-time></controls><coordinator name=[NAME] ><app-path>[COORD-APPLICATION-PATH]</app-path><configuration><property><name>[PROPERTY-NAME]</name><value>[PROPERTY-VALUE]</value></property>...</configuration></coordinator>...
</bundle-app>  

3.任务工作流

  下面,我们在Hadoop平台下去创建这样一个工作流,首先,我们需要配置Hadoop的core-site.xml文件,在该文件中添加以下内容:

  • core-site.xml
        <!-- OOZIE --><property><name>hadoop.proxyuser.hadoop.hosts</name><value>*</value></property><property><name>hadoop.proxyuser.hadoop.groups</name><value>*</value></property>    

  然后,在去修改Oozie的oozie-site.xml文件,在该文件中添加如下内容如下:

  • oozie-site.xml
<property><name>oozie.services</name><value>org.apache.oozie.service.SchedulerService,org.apache.oozie.service.InstrumentationService,org.apache.oozie.service.MemoryLocksService,org.apache.oozie.service.UUIDService,org.apache.oozie.service.ELService,org.apache.oozie.service.AuthorizationService,org.apache.oozie.service.UserGroupInformationService,org.apache.oozie.service.HadoopAccessorService,org.apache.oozie.service.JobsConcurrencyService,org.apache.oozie.service.URIHandlerService,org.apache.oozie.service.DagXLogInfoService,org.apache.oozie.service.SchemaService,org.apache.oozie.service.LiteWorkflowAppService,org.apache.oozie.service.JPAService,org.apache.oozie.service.StoreService,org.apache.oozie.service.SLAStoreService,org.apache.oozie.service.DBLiteWorkflowStoreService,org.apache.oozie.service.CallbackService,org.apache.oozie.service.ActionService,org.apache.oozie.service.ShareLibService,org.apache.oozie.service.CallableQueueService,org.apache.oozie.service.ActionCheckerService,org.apache.oozie.service.RecoveryService,org.apache.oozie.service.PurgeService,org.apache.oozie.service.CoordinatorEngineService,org.apache.oozie.service.BundleEngineService,org.apache.oozie.service.DagEngineService,org.apache.oozie.service.CoordMaterializeTriggerService,org.apache.oozie.service.StatusTransitService,org.apache.oozie.service.PauseTransitService,org.apache.oozie.service.GroupsService,org.apache.oozie.service.ProxyUserService,org.apache.oozie.service.XLogStreamingService,org.apache.oozie.service.JvmPauseMonitorService</value></property><property><name>oozie.service.HadoopAccessorService.hadoop.configurations</name><value>*=/home/hadoop/hadoop-2.6.0/etc/hadoop</value></property>

  在修改完相关文件后,下面我们去创建Oozie的sharelib,其命令如下所示:

oozie-setup.sh sharelib create -fs hdfs://cluster1

  然后使用shareliblist命令查看相关内容,命令如下所示:

oozie admin -shareliblist -oozie http://nna:11000/oozie

  若成功创建,会生成如下图所示内容:

  若未出现相应内容,请检查相关信息是否配置正确即可。

  • 启动Oozie服务
oozied.sh start

  注:在启动时,这里建议打开oozie的启动日志,动态观察相关日志信息,也许会出现一些异常信息,比如:

Caused by: java.lang.NoClassDefFoundError: org/htrace/Traceat org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:214)Caused by: java.lang.NoClassDefFoundError: com/google/protobuf/ServiceExceptionat org.apache.hadoop.ipc.ProtobufRpcEngine.<clinit>(ProtobufRpcEngine.jav

  这些异常信息大多是由于我们在前面打包生成war包时,由于缺少相关的依赖JAR包导致的,这里我们将缺少的JAR从Hadoop的share目录下找到对应的JAR拷贝到Oozie运行war包容器下即可,如:

$OOZIE_HOME/oozie-server/webapps/oozie/WEB-INF/lib

  这里,异常都有相应的提示,大家耐心的按照提示解决异常即可,在解决相关异常后,我们就可以去创建相关工作流。

  Oozie给我们提供了相关示例让我去参考配置,下面我们将examples/apps下的文件上传到HDFS当中去,这里我上传在HDFS的/oozie目录下。接下来,我给大家去演示一个定时任务。首先,我们进去到apps目录下的cron目录,这是一个定时任务的示例,其中包含:coordinator.xml、job.properties和workflow.xml三个文件,这里我们对其进行配置。

  • coordinator.xml
<coordinator-app name="cron-coord" frequency="${coord:minutes(10)}" start="${start}" end="${end}" timezone="GMT+0800"xmlns="uri:oozie:coordinator:0.2"><action><workflow><app-path>${workflowAppUri}</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>

  这里配置的频率为10分钟,该属性可配置其它频率(如:小时,天等)。

  • job.properties
nameNode=hdfs://cluster1
jobTracker=nna:8132
queueName=default
examplesRoot=examplesoozie.coord.application.path=${nameNode}/oozie/${examplesRoot}/apps/cron
start=2015-08-25T13:00+0800
end=2015-08-26T01:00+0800
workflowAppUri=${nameNode}/oozie/${examplesRoot}/apps/cron

  这里由于使用Hadoop2.x的HA特性,在指定NameNode时,直接使用hdfs://cluster1,在Hadoop2.x后,jobTracker被替换了,这里将其地址指向resourcemanager.address的地址。

  • workflow.xml
<workflow-app xmlns="uri:oozie:workflow:0.2" name="one-op-wf"><start to="end"/><end name="end"/>
</workflow-app>

  工作流使用一个空的Job。

  在配置完相关文件后,我们将workflow.xml和coordinator.xml上传到指定的HDFS地址(之前上传examples目录下的corn目录下,上传之前先删除存在的文件),最后,我们启动这样一个工作流,命令如下所示:

$OOZIE_HOME/bin/oozie job -oozie http://nna:11000/oozie -config job.properties -run

  创建成功后,会生成一个JobID,如下图所示:

  注:图中我将命令封装在Shell脚本当中。这里在创建工作流时,同样建议动态开启Oozie的运行日志,便于查看异常信息。

  若是需要Kill任务,可以使用以下命令:

$OOZIE_HOME/bin/oozie job -oozie http://nna:11000/oozie -kill [JOB_ID]

  其Job DAG如下图所示:

4.截图预览

  在提交作业后,我们可以通过浏览Oozie的Web监控界面观察相关信息,如下图所示:

5.总结

  在将Oozie集成到Hadoop平台时,会有点繁琐,出现的异常都会在日志中有详细的记录,我们可以根据这些记录去解决出现的异常。另外,我们在提交任务成功后,在Oozie执行期间若是出现异常,我们也可以通过Oozie的监控界面去非常方便的查看对应的异常信息,并排除。异常信息较多,需要我们耐心的阅读相关记录信息。

6.结束语

  这篇博客就和大家分享到这里,如果大家在研究学习的过程当中有什么问题,可以加群进行讨论或发送邮件给我,我会尽我所能为您解答,与君共勉!

高可用Hadoop平台-Oozie工作流之Hadoop调度相关推荐

  1. aauto+java_高可用数据采集平台(如何玩转3门语言php+.net+aauto)

    吐槽下:本人主程是PHP,团队里面也没有精通.net的人才,为了解决这个平台方案,还是费了一部分劲. 新年了,希望有个新的开始.技术+团队管理都有新的突破吧,在新的一年对自己好些,不能再继续搞基下去. ...

  2. 2021年大数据Hadoop(十四):HDFS的高可用机制

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 HDFS的高可用机制 HDFS高可用介绍 组件介绍 Nam ...

  3. Hadoop HA+Federation 高可用联邦模式搭建指南

    为什么80%的码农都做不了架构师?>>>    简述 Hadoop 集群一共有4种部署模式,详见<Hadoop 生态圈介绍>. HA联邦模式解决了单纯HA模式的性能瓶颈( ...

  4. 用 Keepalived+HAProxy 实现高可用负载均衡的配置方法

    1. 概述 软件负载均衡技术是指可以为多个后端服务器节点提供前端IP流量分发调度服务的软件技术.Keepalived和HAProxy是众多软负载技术中的两种,其中Keepalived既可以实现负载均衡 ...

  5. tcpdump如何判断丢包_亿级规模的高可用微服务系统,如何轻松设计?

    " 说到大规模微服务系统,往往是一些 7*24 时不间断运行的在线系统.那么如何设计一个大规模的微服务系统呢? 图片来自 Pexels 这样的系统往往有以下的要求: 高可用.这类的系统往往需 ...

  6. 蚂蚁集团俞仁杰:金融级云原生之多活容器集群高可用建设实践

    本文整理自蚂蚁集团金融云产品技术部SOFAStack产品专家俞仁杰在2020 GIDC全球互联网数据大会的分享.详细讲解了云原生架构下的多活高可用平台和产品建设相关经验和观点. 过去几年是云原生理念高 ...

  7. Elastic Job 从单点到高可用、同城主备、同城双活

    点击上方蓝色"石杉的架构笔记",选择"设为星标"回复"PDF"获取独家整理的学习资料! 长按扫描上方一元购买 前言 在使用Elastic J ...

  8. 高可用Hadoop平台-Oozie工作流

    1.概述 在开发Hadoop的相关应用使用,在业务不复杂,任务不多的情况下,我们可以直接使用Crontab去完成相关应用的调度.今天给大家介绍的是统一管理各种调度任务的系统,下面为今天分享的内容目录: ...

  9. 配置高可用的Hadoop平台

    1.概述 在Hadoop2.x之后的版本,提出了解决单点问题的方案--HA(High Available 高可用).这篇博客阐述如何搭建高可用的HDFS和YARN,执行步骤如下: 创建hadoop用户 ...

最新文章

  1. VMware vsphere client报错问题
  2. 竞价推广账户创意撰写的技巧之核心思路
  3. oracle之trunc(sysdate)
  4. Oracle优化笔记
  5. 信息学奥赛一本通(1139:整理药名)
  6. Owner PID: 7948 Our PID: 7064
  7. 只要掌握了这条法则,你就有赚不完的钱
  8. linux命令ls -l的默认排序方式
  9. linux主机路由命令,linux查看路由命令
  10. **IEEE论文的检索下载及引用格式**
  11. 大学计算机课程学情分析,大学计算机基础课程教学内容调查分析.doc
  12. google 游戏下载
  13. 2020年396分上岸湖南大学计算机专硕考研经验分享
  14. SWT学习|常用组件及参数
  15. Android App支付系列(二):支付宝SDK接入详细指南(附官方支付demo)
  16. SR-IOV 网卡虚拟化技术
  17. 计算机组成结构实验箱,计算机组成原理实验仪|数字电路实验箱|PLC可编程实验箱-上海育源教学设备...
  18. 使用Paddleclas完成半导体晶圆图谱缺陷种类识别
  19. ubuntu下火狐浏览器无法播放视频解决方案(适用20.04及以上)
  20. selenium,geckodriver与Firefox版本不匹配

热门文章

  1. if循环java语句_java-条件判断和循环语句
  2. edittext 无法输入内容_掌握其中1个Excel小技巧,你就不用再担心会重复录入内容了。...
  3. python中type为什么有main_python中 __name__及__main()__的妙处
  4. 江苏大学计算机学院宋美如,姜震-江苏大学计算机科学与通信工程学院
  5. c语言递归求n的阶乘之和,c语言用递归的方法实现1!+2!+3!+4!+.....+n!=?阶乘之和...
  6. quarz设置定时器任务的有效时间段_quartz定时任务时间设置
  7. android电视怎么升级失败,智能电视升级失败,原因都在这里!
  8. 数据处理--One Hot Encoding
  9. 《天天数学》连载35:二月四日
  10. 安卓案例:利用帧动画实现游戏特效