阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

高可用Hadoop平台-Oozie工作流之Hadoop调度

172次阅读
没有评论

共计 6762 个字符,预计需要花费 17 分钟才能阅读完成。

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

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

高可用 Hadoop 平台-Oozie 工作流之 Hadoop 调度

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

  • 启动 Oozie 服务
oozied.sh start

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

Caused by: java.lang.NoClassDefFoundError: org/htrace/Trace
    at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:214)
    
    Caused by: java.lang.NoClassDefFoundError: com/google/protobuf/ServiceException
    at 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=examples

oozie.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,如下图所示:

高可用 Hadoop 平台-Oozie 工作流之 Hadoop 调度

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

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

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

其 Job DAG 如下图所示:

高可用 Hadoop 平台-Oozie 工作流之 Hadoop 调度

4. 截图预览

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

高可用 Hadoop 平台-Oozie 工作流之 Hadoop 调度

高可用 Hadoop 平台-Oozie 工作流之 Hadoop 调度

高可用 Hadoop 平台-Oozie 工作流之 Hadoop 调度

5. 总结

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

6. 结束语

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

下面关于 Oozie 的文章您也可能喜欢,不妨看看:

Oozie4.0.1 详细安装教程  http://www.linuxidc.com/Linux/2014-12/110456tm

指定 Oozie Java 节点的 Hadoop 属性 http://www.linuxidc.com/Linux/2014-06/103617.htm

Hadoop 平台上 Oozie 调度系统的安装配置 http://www.linuxidc.com/Linux/2014-04/100382.htm

Oozie 中运行 mapreduce node-action 时的常见异常解决方法 http://www.linuxidc.com/Linux/2014-02/96685.htm

Oozie web-console 时间本地化 http://www.linuxidc.com/Linux/2012-11/74797.htm

Hadoop Oozie 学习笔记 使用 Oozie, 通过命令行运行 example http://www.linuxidc.com/Linux/2012-08/67029.htm

Hadoop Oozie 学习笔记 自定义安装和启动 http://www.linuxidc.com/Linux/2012-08/67028.htm

更多 Hadoop 相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-11/125194.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计6762字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中