Apache oozie ---工作流调度软件
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 ---工作流调度软件相关推荐
- Oozie工作流调度工具的部署
一.Oozie简介 Oozie英文翻译为:驯象人.一个基于工作流引擎的开源框架,由Cloudera公司贡献给Apache,提供对Hadoop Mapreduce.Pig Jobs的任务调度与协调.Oo ...
- 工作流调度工具--Oozie
一.背景 一个完整的数据分析系统通常是由大量的任务单元组成,Shell脚本.Java程序.MapReduce程序.Hive脚本等等,各个任务单元之间存在时间先后及前后依赖关系. 为了很好的组织这样的复 ...
- AI Multiple 力荐2022年十大开源工作流调度和 WLA工具,Apache DolphinScheduler 在列!...
作者 | Alamira Jouman Hajjar 2021 年的一项调查显示,企业内部使用开源工具的首要目的,是想要实现 IT 基础设施的现代化和数字化转型.反之,作为 IT 部门数字化转型的推动 ...
- 工作流调度系统介绍,常见工作流调度系统对比,azkaban与Oozie对比,Azkaban介绍与特性(来自学习笔记)
1. 工作流调度器azkaban 1.1 概述 1.1.1为什么需要工作流调度系统 一个完整的数据分析系统通常都是由大量任务单元组成:shell脚本程序,java程序,mapreduce程序.hive ...
- 高可用Hadoop平台-Oozie工作流之Hadoop调度
1.概述 在<高可用Hadoop平台-Oozie工作流>一篇中,给大家分享了如何去单一的集成Oozie这样一个插件.今天为大家介绍如何去使用Oozie创建相关工作流运行与Hadoop上,已 ...
- Apache DolphinScheduler 大数据工作流调度系统
[本文正在参与 "拥抱开源 - Apache DolphinScheduler 有奖征稿活动],活动地址 Apache DolphinScheduler 大数据工作流调度系统 一.背景 二. ...
- Azkaban:工作流调度
Azkaban 工作流 工作流产生背景 工作流调度实现方式 工作流调度工具之间对比 Azkaban调度器 Azkaban介绍 Azkaban功能特点 Azkaban原理架构 Azkaban三种部署模式 ...
- 高可用Hadoop平台-Oozie工作流
1.概述 在开发Hadoop的相关应用使用,在业务不复杂,任务不多的情况下,我们可以直接使用Crontab去完成相关应用的调度.今天给大家介绍的是统一管理各种调度任务的系统,下面为今天分享的内容目录: ...
- 在Hue中创建一个Oozie工作流
准备 建表 假设在mysql中有一个用户信息表user,包含id,name,address三个字段.其中address字段存在字符串null. 在hive创建对应的表: ods_user - 原始用户 ...
最新文章
- MapReduce框架Mapper和Reducer类源码分析
- 005-SDK框架之LYWSDKCallBackListener.h
- php docker开发环境,使用Docker的PHP开发环境
- Tarjan算法学习1-双连通
- 图片资源 php,php URL图片资源传参生成对应尺寸图片
- 前端测试框架 jasmine 的使用
- library的英语怎么读音_如何提高英语听力
- 计算机系统的输入与输出接口是,计算机输入输出系统与接口技术
- unity, destroy gameObject destroy all children
- 谷歌修复又一枚遭在野利用的 Chrome 0day
- [LeetCode] One Edit Distance 一个编辑距离
- python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图
- eth的geth钱包安装
- 回想那天让我虎躯一震的bug:Mybatis Ognl引起的异常
- 关于 Microsoft Teams 开发你需要知道的一切
- 半夜撸 flap bird
- 达梦:如何登录数据库(基础篇)
- 计算机安全知识策划书,安全知识活动策划书
- NULL与唯一性约束
- AT89C51单片机的抢答器的设计(2位一体共阳)
热门文章
- 百度有啊前端js框架分析(一)
- obs直播软件 android,斗鱼游戏直播教程-OBS直播软件篇
- (凯思奥2020-03月)问题记录3,GUI问题记录3 4,国际化异常,微信平台接入 = 数据库修改 + 自动化填充 + 前后端接口修正 + 联调测试问题 + 微信与数字账号绑定 + 思考+部署
- selenium登录豆瓣网
- 宋宝华:slab在内核内存管理和用户态Memcached的双重存在
- 搭建exchange邮件服务器一定要ad域么?_域渗透神器-AD Explorer使用指南
- 基于Python的阴阳师后台全平台辅助
- UVA	10387	Billiard
- Flash与服务器通信简介
- 蓝桥杯 结果填空 猜生日