【CDH6】Oozie 安装及使用

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

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

    85 引用 • 122 回帖 • 617 关注
  • oozie
    1 引用

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • Openfire

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

    6 引用 • 7 回帖 • 94 关注
  • 倾城之链
    23 引用 • 66 回帖 • 120 关注
  • 996
    13 引用 • 200 回帖 • 6 关注
  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖
  • 博客

    记录并分享人生的经历。

    272 引用 • 2386 回帖
  • CodeMirror
    1 引用 • 2 回帖 • 125 关注
  • Bug

    Bug 本意是指臭虫、缺陷、损坏、犯贫、窃听器、小虫等。现在人们把在程序中一些缺陷或问题统称为 bug(漏洞)。

    71 引用 • 1737 回帖 • 1 关注
  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 51 关注
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    35 引用 • 35 回帖
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    21 引用 • 58 回帖
  • SOHO

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

    7 引用 • 55 回帖 • 65 关注
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    713 引用 • 1174 回帖 • 104 关注
  • Bootstrap

    Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。

    18 引用 • 33 回帖 • 680 关注
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    334 引用 • 323 回帖 • 19 关注
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    324 引用 • 1395 回帖
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖
  • 黑曜石

    黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。

    A second brain, for you, forever.

    10 引用 • 88 回帖
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖 • 5 关注
  • abitmean

    有点意思就行了

    38 关注
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    5 引用 • 62 回帖
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    311 引用 • 546 回帖 • 1 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖 • 1 关注
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 600 关注
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    163 引用 • 473 回帖
  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    7 引用 • 30 回帖 • 429 关注
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    165 引用 • 407 回帖 • 510 关注