Apache oozie

概述

是一款工作流调度软件, 来自于 cloudera, 后来贡献给 Apache

Oozie 是运行于 Java servlet 容器上的一个 java web 应用

Oozie 的目的是按照 DAG(有向无环图)调度一系列的 Map/Reduce 或者 Hive 等任务

工作流核心

  • 依赖执行
  • 周期重复执行

适用场景

  • 需要按顺序进行一系列任务
  • 需要并行处理的任务
  • 需要定时、周期触发的任务
  • 可视化作业流运行过程
  • 运行结果或异常的通报

Oozie 的架构

Oozie Client

  • 提供命令行、java api、rest 等方式,对 Oozie 的工作流流程的提交、启动、运行等操作

Oozie WebApp

  • 即 Oozie Server,本质是一个 java 应用。可以使用内置的 web 容器,也可以使用外置的 web 容器
  • 主要是给用户提供了web页面查看

Hadoop Cluster

  • 底层执行 Oozie 编排流程的各个 hadoop 生态圈组件
  • oozie是通过启动MapReduce程序来提交各个不同类型任务的

图示

Oozie 基本原理

原理

  • Oozie 对工作流的编排,是基于 workflow.xml 文件来完成的
  • 用户预先将工作流执行规则定制于 workflow.xml 文件中,并在 job.properties 配置相关的参数,然后由 Oozie Server 向 MR 提交 job 来启动工作流

流程节点

  • Control Flow Nodes

    • 控制工作流执行路径
    • 包括 start,end,kill,decision,fork,join
  • Action Nodes

    • 决定每个操作执行的任务类型
    • 包括 MapReduce、java、hive、shell 等
  • 图示

Oozie 工作流类型

WorkFlow

  • 规则相对简单,不涉及定时、批处理的工作流。顺序执行流程节点

  • 图示

Coordinator

  • Coordinator 将多个工作流 Job 组织起来,称为 Coordinator Job,
    并指定触发时间和频率,还可以配置数据集、并发数等,
    类似于在工作流外部增加了一个协调器来管理这些工作流的工作流 Job 的运行

  • 图示

Bundle

  • 针对 coordinator 的批处理工作流
    Bundle 将多个 Coordinator 管理起来,只需要一个 Bundle 提交即可

  • 图示

Apache Oozie 安装

修改 hadoop 相关配置

  • 配置 httpfs 服务
    修改 hadoop 的配置文件 core-site.xml

    • <name>hadoop.proxyuser.root.hosts</name>
      
    • <value>*</value>
      
    • <name>hadoop.proxyuser.root.groups</name>
      
    • <value>*</value>
      
  • 配置 jobhistory 服务
    修改 hadoop 的配置文件 mapred-site.xml

    • <name>mapreduce.jobhistory.address</name>
      
    • <value>node-1:10020</value>
      
    • <description>MapReduce JobHistory Server IPC host:port</description>
      
    • <name>mapreduce.jobhistory.webapp.address</name>
      
    • <value>node-1:19888</value>
      
    • <description>MapReduce JobHistory Server Web UI host:port</description>
      
    • <name>mapreduce.jobhistory.done-dir</name>
      
    • <value>/export/data/history/done</value>
      
    • <name>mapreduce.jobhistory.intermediate-done-dir</name>
      
    • <value>/export/data/history/done_intermediate</value>
      
    • 注意

      • 启动 history-server

        • mr-jobhistory-daemon.sh start historyserver
      • 停止 history-server

        • mr-jobhistory-daemon.sh stop historyserver
      • 访问jobhistory方式

        • http://node-1:19888
  • 把修改配置scp给其他机器

  • 重启 Hadoop 集群相关服务

上传 oozie 的安装包并解压

  • oozie-4.1.0-cdh5.14.0.tar.gz

添加相关依赖

  • oozie 的安装路径下创建 libext 目录

    • cd /export/servers/oozie-4.1.0-cdh5.14.0
    • mkdir -p libext
  • 拷贝 hadoop 依赖包到 libext

    • cd /export/servers/oozie-4.1.0-cdh5.14.0
    • cp -ra hadooplibs/hadooplib-2.6.0-cdh5.14.0.oozie-4.1.0-cdh5.14.0/* libext/
  • 上传 mysql 的驱动包到 libext

    • mysql-connector-java-5.1.32.jar
  • 添加 ext-2.2.zip 压缩包到 libext

    • ext-2.2.zip

修改 oozie-site.xml

  • 配置文件位置

    • /export/servers/oozie-4.1.0-cdh5.14.0/conf/oozie-site.xml
  • 配置文件内容

    • <name>oozie.service.JPAService.jdbc.driver</name>
      
    • <value>com.mysql.jdbc.Driver</value>
      
    • <name>oozie.service.JPAService.jdbc.url</name>
      
    • <value>jdbc:mysql://node-1:3306/oozie</value>
      
    • <name>oozie.service.JPAService.jdbc.username</name>
      
    • <value>root</value>
      
    • <name>oozie.service.JPAService.jdbc.password</name>
      
    • <value>hadoop</value>
      
    • <name>oozie.processing.timezone</name>
      
    • <value>GMT+0800</value>
      
    • <name>oozie.service.coord.check.maximum.frequency</name>
      
    • <value>false</value>
      
    • <name>oozie.service.HadoopAccessorService.hadoop.configurations</name>
      
    • <value>*=/export/servers/hadoop-2.7.5/etc/hadoop</value>
      

初始化 mysql 相关信息

  • 将oozie包中的yarn.tar.gz上传到hdfs

    • bin/oozie-setup.sh sharelib create -fs hdfs://node-1:8020 -locallib oozie-sharelib-4.1.0-cdh5.14.0-yarn.tar.gz
  • 创建 mysql 数据库

    • mysql -uroot -p
    • create database oozie;
  • 初始化创建 oozie 的数据库表

    • cd /export/servers/oozie-4.1.0-cdh5.14.0
    • bin/oozie-setup.sh db create -run -sqlfile oozie.sql

打包项目,生成 war 包

  • cd /export/servers/oozie-4.1.0-cdh5.14.0
  • bin/oozie-setup.sh prepare-war

配置 oozie 环境变量

  • vim /etc/profile

    • export OOZIE_HOME=/export/servers/oozie-4.1.0-cdh5.14.0
    • export OOZIE_URL=http://node03.hadoop.com:11000/oozie
    • export PATH=PATH:PATH:PATH:OOZIE_HOME/bin
  • source /etc/profile

启动关闭 oozie 服务

  • 启动命令

    • cd /export/servers/oozie-4.1.0-cdh5.14.0
    • bin/oozied.sh start
  • 关闭命令

    • bin/oozied.sh stop
  • 注意

    • 启动的时候产生的 pid 文件,如果是 kill 方式关闭进程 则需要删除该文件重新启动,否则再次启动会报错

    • 如图所示

浏览器 web UI 页面

  • http://node-1:11000/oozie/

解决 oozie 页面时区显示异常

  • 修改 js 当中的时区问题

    • cd oozie-server/webapps/oozie

    • vim oozie-console.js

      • function getTimeZone() {
      • Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
      • return Ext.state.Manager.get(“TimezoneId”,“GMT+0800”);
      • }
  • 重启 oozie 即可

Apache Oozie 使用

可参考官方提供的模板进行修改

  • cd /export/servers/oozie-4.1.0-cdh5.14.0
  • tar -zxvf oozie-examples.tar.gz

创建统一的工作目录,便于集中管理 oozie

  • cd /export/servers/oozie-4.1.0-cdh5.14.0
  • mkdir oozie_works

优化更新 hadoop 相关配置

  • yarn 容器资源分配属性
    yarn-site.xml

    • <!—节点最大可用内存,结合实际物理内存调整 -->
    •     <name>yarn.nodemanager.resource.memory-mb</name>
      
    •     <value>3072</value>
      
    • <!—每个容器可以申请内存资源的最小值,最大值 -->
    •     <name>yarn.scheduler.minimum-allocation-mb</name>
      
    •     <value>1024</value>
      
    •     <name>yarn.scheduler.maximum-allocation-mb</name>
      
    •     <value>3072</value>
      
    • <!—修改为Fair公平调度,动态调整资源,避免yarn上任务等待(多线程执行) -->
    •  <name>yarn.resourcemanager.scheduler.class</name>
      
    •  <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
      
    • <!—Fair调度时候是否开启抢占功能 -->
    •     <name>yarn.scheduler.fair.preemption</name>
      
    •     <value>true</value>
      
    • <!—超过多少开始抢占,默认0.8–>
    • <property>
      
    •     <name>yarn.scheduler.fair.preemption.cluster-utilization-threshold</name>
      
    •     <value>1.0</value>
      
    • </property>
      
  • mapreduce资源申请配置
    mapred-site.xml

    • <!—单个maptask、reducetask可申请内存大小 -->
    •     <name>mapreduce.map.memory.mb</name>
      
    •     <value>1024</value>
      
    •     <name>mapreduce.reduce.memory.mb</name>
      
    •     <value>1024</value>
      
  • 重启hadoop集群

  • 重启oozie服务

Oozie调度shell脚本

  • 准备配置模板

    • 把shell的任务模板拷贝到oozie的工作目录当中去

      • cd /export/servers/oozie-4.1.0-cdh5.14.0
      • cp -r examples/apps/shell/ oozie_works/
    • 准备待调度的shell脚本文件

      • cd /export/servers/oozie-4.1.0-cdh5.14.0

      • vim oozie_works/shell/hello.sh

        • #!/bin/bash
        • echo “hello world” >> /export/servers/hello_oozie.txt
  • 修改配置模

    • 修改job.properties

      • cd /export/servers/oozie-4.1.0-cdh5.14.0/oozie_works/shell

      • vim job.properties

        • nameNode=hdfs://node-1:8020
        • jobTracker=node-1:8032
        • queueName=default
        • examplesRoot=oozie_works
        • oozie.wf.application.path=nameNode/user/{nameNode}/user/nameNode/user/{user.name}/${examplesRoot}/shell
        • EXEC=hello.sh
    • 修改workflow.xml

      • <shell xmlns="uri:oozie:shell-action:0.2">
        
      •     <job-tracker>${jobTracker}</job-tracker>
        
      •     <name-node>${nameNode}</name-node>
        
      •     <configuration>
        
      •         <property>
        
      •             <name>mapred.job.queue.name</name>
        
      •             <value>${queueName}</value>
        
      •         </property>
        
      •     </configuration>
        
      •     <exec>${EXEC}</exec>
        
      •     <file>/user/root/oozie_works/shell/${EXEC}#${EXEC}</file>
        
      •     <capture-output/>
        
      • </shell>
        
      • <ok to="end"/>
        
      • <error to="fail"/>
        
      • <switch>
        
      •     <case to="end">
        
      •         ${wf:actionData('shell-node')['my_output'] eq 'Hello Oozie'}
        
      •     </case>
        
      •     <default to="fail-output"/>
        
      • </switch>
        
      • <message>Shell action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
        
      • <message>Incorrect output, expected [Hello Oozie] but was [${wf:actionData('shell-node')['my_output']}]</message>
        
  • 上传调度任务到hdfs

    • cd /export/servers/oozie-4.1.0-cdh5.14.0
    • hdfs dfs -put oozie_works/ /user/root
  • 执行调度任务

    • cd /export/servers/oozie-4.1.0-cdh5.14.0
    • bin/oozie job -oozie http://node-1:11000/oozie -config oozie_works/shell/job.properties -run

Oozie任务查看、杀死

查看所有普通任务

  • oozie jobs

查看定时任务

  • oozie jobs -jobtype coordinator

杀死某个任务oozie

  • 可以通过jobid来杀死某个定时任务

  • oozie job -kill [id]

  • 例如

    • oozie job -kill 0000085-180628150519513-oozie-root-C

附件

Apache Oozie.docx

Apache oozie ---工作流调度软件相关推荐

  1. Oozie工作流调度工具的部署

    一.Oozie简介 Oozie英文翻译为:驯象人.一个基于工作流引擎的开源框架,由Cloudera公司贡献给Apache,提供对Hadoop Mapreduce.Pig Jobs的任务调度与协调.Oo ...

  2. 工作流调度工具--Oozie

    一.背景 一个完整的数据分析系统通常是由大量的任务单元组成,Shell脚本.Java程序.MapReduce程序.Hive脚本等等,各个任务单元之间存在时间先后及前后依赖关系. 为了很好的组织这样的复 ...

  3. AI Multiple 力荐2022年十大开源工作流调度和 WLA工具,Apache DolphinScheduler 在列!...

    作者 | Alamira Jouman Hajjar 2021 年的一项调查显示,企业内部使用开源工具的首要目的,是想要实现 IT 基础设施的现代化和数字化转型.反之,作为 IT 部门数字化转型的推动 ...

  4. 工作流调度系统介绍,常见工作流调度系统对比,azkaban与Oozie对比,Azkaban介绍与特性(来自学习笔记)

    1. 工作流调度器azkaban 1.1 概述 1.1.1为什么需要工作流调度系统 一个完整的数据分析系统通常都是由大量任务单元组成:shell脚本程序,java程序,mapreduce程序.hive ...

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

    1.概述 在<高可用Hadoop平台-Oozie工作流>一篇中,给大家分享了如何去单一的集成Oozie这样一个插件.今天为大家介绍如何去使用Oozie创建相关工作流运行与Hadoop上,已 ...

  6. Apache DolphinScheduler 大数据工作流调度系统

    [本文正在参与 "拥抱开源 - Apache DolphinScheduler 有奖征稿活动],活动地址 Apache DolphinScheduler 大数据工作流调度系统 一.背景 二. ...

  7. Azkaban:工作流调度

    Azkaban 工作流 工作流产生背景 工作流调度实现方式 工作流调度工具之间对比 Azkaban调度器 Azkaban介绍 Azkaban功能特点 Azkaban原理架构 Azkaban三种部署模式 ...

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

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

  9. 在Hue中创建一个Oozie工作流

    准备 建表 假设在mysql中有一个用户信息表user,包含id,name,address三个字段.其中address字段存在字符串null. 在hive创建对应的表: ods_user - 原始用户 ...

最新文章

  1. MapReduce框架Mapper和Reducer类源码分析
  2. 005-SDK框架之LYWSDKCallBackListener.h
  3. php docker开发环境,使用Docker的PHP开发环境
  4. Tarjan算法学习1-双连通
  5. 图片资源 php,php URL图片资源传参生成对应尺寸图片
  6. 前端测试框架 jasmine 的使用
  7. library的英语怎么读音_如何提高英语听力
  8. 计算机系统的输入与输出接口是,计算机输入输出系统与接口技术
  9. unity, destroy gameObject destroy all children
  10. 谷歌修复又一枚遭在野利用的 Chrome 0day
  11. [LeetCode] One Edit Distance 一个编辑距离
  12. python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图
  13. eth的geth钱包安装
  14. 回想那天让我虎躯一震的bug:Mybatis Ognl引起的异常
  15. 关于 Microsoft Teams 开发你需要知道的一切
  16. 半夜撸 flap bird
  17. 达梦:如何登录数据库(基础篇)
  18. 计算机安全知识策划书,安全知识活动策划书
  19. NULL与唯一性约束
  20. AT89C51单片机的抢答器的设计(2位一体共阳)

热门文章

  1. 百度有啊前端js框架分析(一)
  2. obs直播软件 android,斗鱼游戏直播教程-OBS直播软件篇
  3. (凯思奥2020-03月)问题记录3,GUI问题记录3 4,国际化异常,微信平台接入 = 数据库修改 + 自动化填充 + 前后端接口修正 + 联调测试问题 + 微信与数字账号绑定 + 思考+部署
  4. selenium登录豆瓣网
  5. 宋宝华:slab在内核内存管理和用户态Memcached的双重存在
  6. 搭建exchange邮件服务器一定要ad域么?_域渗透神器-AD Explorer使用指南
  7. 基于Python的阴阳师后台全平台辅助
  8. UVA 10387 Billiard
  9. Flash与服务器通信简介
  10. 蓝桥杯 结果填空 猜生日