【CDH6】Oozie 安装及使用

本贴最后更新于 1698 天前,其中的信息可能已经渤澥桑田

Oozie 的安装

oozie 是一个基于 Hadoop 的工作流引擎,也叫任务调度器,它以 xml 的形式写调度流程,可以调度 mr、pig、hive、shell、jar 和 spark 等。在工作中如果多个任务之间有依赖执行顺序要求,可以使用 oozie 来进行调度执行。

  1. 选择集群,添加 oozie 服务
    image20201218154155080.png
    image20201218154357617.png

  2. 添加服务向导
    选择依赖
    image20201218154622008.png
    选择节点,分配 oozie 角色:
    image20201218154717800.png
    当点击“继续”后,需要给 oozie 配置数据库,需要在 cm-s1 节点上连接 mysql,执行创建数据库及分配权限语句:

    [root@cm-s1 ~]# mysql -hcm-s1 -pAz123456_ -e "create database oozie DEFAULT CHARACTER SET utf8;grant all on oozie.* TO 'oozie'@'%' IDENTIFIED BY 'Az123456_';flush privileges;"

    在弹出的页面中选择数据库,填写用户名及密码,点击“测试连接”,测试数据库连接成功后,点击“继续”:
    image20201218155121444.png
    在弹出的页面中,选择默认 oozie 使用的数据目录,默认即可,点击“继续”:
    image20201218155209015.png
    等待服务向导完成,点击“继续”->“完成”,完成 oozie 安装。
    image20201218155536704.png

Oozie 的使用

Oozie 是用于 Hadoop 平台的开源的工作流调度引擎。 用来管理 Hadoop 作业。 属于 web 应用程序,由 Oozie client 和 Oozie Server 两个组件构成。 Oozie Server 是运行于 Java Servlet 容器(Tomcat)中的 web 程序。

  1. Oozie 作用:

    • 统一调度 hadoop 系统中常见的 mr 任务启动、hdfs 操作、shell 调度、hive 操作等
    • 使得复杂的依赖关系、时间触发、事件触发使用 xml 语言进行表达
    • 一组任务使用一个 DAG 来表示,使用图形表达流程逻辑更加清晰
    • 支持很多种任务调度,能完成大部分 hadoop 任务处理
    • 程序定义支持 EL 常量和函数,表达更加丰富
  2. Oozie 中的概念:
    wpsV0bMaR.png

    • workflow: 工作流,顺序执行流程节点,支持 fork(分支多个节点),join(合并多个节点为一个)。
    • coordinator: 多个 workflow 可以组成一个 coordinator,可以把前几个 workflow 的输出作为后一个 workflow 的输入,也可以定义 workflow 的触发条件,来做定时触发。
    • bundle: 是对一堆 coordinator 的抽象,可绑定多个 coordinator。
  3. Oozie Web 控制台

    • 将 ext-2.2 解压到对应目录
      如果使用 web 控制台,还需要在 oozie 安装节点 cm-s1 上将“ext-2.2”解压到路径“/var/lib/oozie”目录下,首先将“ext-2.2”上传到 cm1 节点上,在 cm1 节点上执行如下命令:
      [root@cm-s1 ~]# wget https://archive.cloudera.com/gplextras/misc/ext-2.2.zip [root@cm-s1 ~]# unzip ext-2.2.zip -d /var/lib/oozie/ [root@cm-s1 ~]# chown -R oozie:oozie /var/lib/oozie/ext-2.2
    • 启用 Oozie 服务器 Web 控制台
      在 CDH 中进入 oozie,点击配置,找打“启用 Oozie 服务器 Web 控制台”选项,开启,保存更改之后,重启 oozie 服务即可。image20201220180218050.pngimage20201220180427036.png
    • 浏览器或者 CDH 页面访问 oozie 的 webui,地址 http://cm-s1:11000image20201220180709031.png
  4. Oozie job.properties 文件参数
    wpsxVdRFY.png

  5. Oozie 提交任务命令
    默认在 CDH 中安装了 oozie 后,每台节点都可以当做客户端来提交 oozie 任务流任务。启动任务,停止任务,提交任务,开始任务和查看任务执行情况的命令如下:

    启动任务中的--run 包含了 submit 和 start 操作。

    启动任务: oozie job -oozie http://ip:11000/oozie/ -config job.properties -run 停止任务: oozie job -oozie http://ip:11000/oozie/ -kill 0000002-150713234209387-oozie-oozi-W 提交任务: oozie job -oozie http://ip:11000/oozie/ -config job.properties -submit 开始任务: oozie job -oozie http://ip:11000/oozie/ -config job.properties -start 0000003-150713234209387-oozie-oozi-W 查看任务执行情况: oozie job -oozie http://ip:11000/oozie/ -config job.properties -info 0000003-150713234209387-oozie-oozi-W
  6. Oozie 提交任务流
    Oozie 提交任务需要两个文件,一个是 workflow.xml 文件,这个文件要上传到 HDFS 中,当执行 oozie 任务流调度时,oozie 服务端会在从 xml 中获取当前要执行的任务。
    另一个 job.properties 文件,这个文件是 oozie 在客户端提交流调度任务时告诉 oozie 服务端 workflow.xml 文件在什么位置的描述配置文件。
    配置 workflow.xml 文件,内容如下:

    <workflow-app xmlns="uri:oozie:workflow:0.3" name="shell-wf">  <start to="shell-node"/>  <action name="shell-node">    <shell xmlns="uri:oozie:shell-action:0.1">      <job-tracker>${jobTracker}</job-tracker>      <name-node>${nameNode}</name-node>      <configuration>        <property>          <name>mapred.job.queue.name</name>          <value>${queueName}</value>        </property>      </configuration>      <exec>echo</exec>      <argument>**** first-hello oozie *****</argument>    </shell>    <ok to="end"/>    <error to="fail"/>  </action>  <kill name="fail">    <message>Map/Reduce failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>  </kill>  <end name="end"/> </workflow-app>

    在 CDH 中进入 hue,在 HDFS 中创建文件 workflow.xml:
    image20201220194219731.png
    打开文件编辑器,将以上内容写入 workflow.xml 中,点击保存:
    image20201220194454900.png
    在任意节点上,选择一个节点当做提交 oozie 任务的客户端,创建 job.properties 文件,写入以下内容:

    nameNode=hdfs://cm-s1:8020 jobTracker=cm-s1:8032 queueName=default examplesRoot=examples oozie.wf.application.path=${nameNode}/user/myhue

    提交 oozie 任务后会自动转换成 MapReduce 任务执行,这个时候需要 Yarn 资源调度。默认在 Hadoop2.x 版本中默认 Yarn 每个 NodeManager 节点分配资源为 8core 和 8G,内存配置为 “yarn.nodemanager.resource.memory-mb” 代表当前 NodeManager 可以使用的内存总量。每个 container 启动默认可以使用最大的内存量为 “yarn.scheduler.maximum-allocation-mb”,默认为 8G。
    在 Hadoop3.x 版本之后,Yarn NodeManager 节点默认分配的资源为 1G 和 4Core。这里 oozie 任务需要的默认资源是 2G 和 1Core,所以这里需要在 Yarn 中调大每台 NodeManager 的内存资源,在 Yarn 配置中找到配置项 “yarn.nodemanager.resource.memory-mb(表示该节点上 YARN 可使用的物理内存总量)” 调节到至少 2G 以上,同时需要调大每个 Container 可以使用的最大内存,将 “yarn.scheduler.maximum-allocation-mb(每个 Container 可申请的最多物理内存量)” 调节到至少 2G 以上,但是应小于 “yarn.nodemanager.resource.memory-mb” 参数。配置如下:
    image20201220195540947.png
    之后,需要重新启动 Yarn 集群即可。配置完成后,在当前客户端执行提交如下 oozie 的命令,可以看到返回了一个 jobid,可以根据这个 jobId,停止任务或者查看任务执行情况。

    [hdfs@cm-s1 ~]# oozie job -oozie http://cm-s1:11000/oozie/ -config job.properties -run ... job: 0000001-201220195901543-oozie-oozi-W

    启动任务之后,可以在 oozie 的 webui 页面中看到如下结果:
    image20201220200901237.png
    可以查看到分别使用 hdfs 用户和 root 用户提交的任务会因权限的不同而出现不同的结果,root 用户没有权限访问 workflow.xml 文件而被中止任务,其实只需要 myhue 用户就够了,没必要启用超级用户 hdfs,这里只是为了方便。
    继续点击任务流中的任务找到对应的 console url,在浏览器中输入查看结果:
    image20201220201547017.png
    image20201220202453542.png

  7. Oozie 提交含有多个任务的任务流
    通过 hue 可以创建 workflow.xml 文件写入以下命令,执行任务 a 和任务 b:

    <workflow-app xmlns="uri:oozie:workflow:0.3" name="myflow">  <start to="a"/>  <action name="a">    <shell xmlns="uri:oozie:shell-action:0.1">      <job-tracker>${jobTracker}</job-tracker>      <name-node>${nameNode}</name-node>      <configuration>        <property>          <name>mapred.job.queue.name</name>          <value>${queueName}</value>        </property>       </configuration>       <exec>echo</exec>      <argument>**** first-hello oozie *****</argument>    </shell>    <ok to="b"/>    <error to="fail"/>  </action>  <action name="b">    <shell xmlns="uri:oozie:shell-action:0.1">    <job-tracker>${jobTracker}</job-tracker>    <name-node>${nameNode}</name-node>    <configuration>      <property>        <name>mapred.job.queue.name</name>        <value>${queueName}</value>      </property>    </configuration>    <exec>echo</exec>    <argument>**** second-i am second *****</argument>    </shell>    <ok to="end"/>    <error to="fail"/>    </action>    <kill name="fail">       <message>Map/Reduce failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>   </kill>   <end name="end"/> </workflow-app>

    在任意节点,创建文件:job.properties,写入以下内容:

    nameNode=hdfs://cm-s1:8020 jobTracker=cm-s1:8032 queueName=default examplesRoot=examples oozie.wf.application.path=${nameNode}/user/myhue

    执行提交 oozie 任务的命令:

    [hdfs@cm-s1 ~]$ oozie job -oozie http://cm-s1:11000/oozie/ -config job.properties -run job: 0000002-201220195901543-oozie-oozi-W

    执行命令之后,进入 oozie webui 查看任务执行情况:
    image20201220203443012.png
    可以点击任务流中的某个任务,查看详细执行信息和登录 yarn 查看结果。
    image20201220203620848.png

  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    89 引用 • 113 回帖
  • CDH
    7 引用 • 2 回帖
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    93 引用 • 122 回帖 • 619 关注
  • oozie
    1 引用

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
k8s
59774 号黑客成员, 2020-05-16 加入 天津

推荐标签 标签

  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    19 引用 • 23 回帖 • 744 关注
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 411 关注
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 644 关注
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 201 关注
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖 • 15 关注
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    101 引用 • 905 回帖
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 90 关注
  • OpenCV
    15 引用 • 36 回帖
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    694 引用 • 537 回帖
  • Visio
    1 引用 • 2 回帖
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1444 引用 • 10083 回帖 • 500 关注
  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    415 引用 • 3601 回帖
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 42 关注
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    20 引用 • 245 回帖 • 241 关注
  • AWS
    11 引用 • 28 回帖 • 3 关注
  • Anytype
    3 引用 • 31 回帖 • 35 关注
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 43 关注
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    187 引用 • 1021 回帖 • 2 关注
  • OneNote
    1 引用 • 3 回帖 • 3 关注
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 661 关注
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 347 关注
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 258 关注
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 651 关注
  • CodeMirror
    2 引用 • 17 回帖 • 177 关注
  • 工具

    子曰:“工欲善其事,必先利其器。”

    302 引用 • 772 回帖
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    247 引用 • 1340 回帖 • 1 关注