【CDH6】Oozie 安装及使用

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

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 回帖 • 1 关注
  • CDH
    7 引用 • 2 回帖
  • Hadoop

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

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

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • Office

    Office 现已更名为 Microsoft 365. Microsoft 365 将高级 Office 应用(如 Word、Excel 和 PowerPoint)与 1 TB 的 OneDrive 云存储空间、高级安全性等结合在一起,可帮助你在任何设备上完成操作。

    5 引用 • 34 回帖
  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖 • 2 关注
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    126 引用 • 74 回帖
  • 职场

    找到自己的位置,萌新烦恼少。

    127 引用 • 1708 回帖 • 3 关注
  • IPFS

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

    20 引用 • 245 回帖 • 233 关注
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖 • 1 关注
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    439 引用 • 1238 回帖 • 589 关注
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    32 引用 • 108 回帖 • 1 关注
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    21 引用 • 31 回帖 • 1 关注
  • OneNote
    1 引用 • 3 回帖
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 606 关注
  • Follow
    4 引用 • 12 回帖 • 4 关注
  • 开源

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

    413 引用 • 3591 回帖
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    26122 引用 • 108461 回帖
  • Outlook
    1 引用 • 5 回帖 • 2 关注
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 262 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    497 引用 • 934 回帖
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    37 引用 • 157 回帖 • 1 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 283 关注
  • RemNote
    2 引用 • 16 回帖 • 25 关注
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖 • 4 关注
  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 26 关注
  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用 • 2 关注
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 121 关注
  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    34 引用 • 37 回帖 • 556 关注
  • 自由行
    2 关注
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 734 关注