文章目录

  • 一、oozie
    • 1、Oozie模块
      • 1.Workflow
      • 2.Coordinator
      • 3.Bundle Job
    • 2、Oozie的常用节点
      • 1.控制流节点(Control Flow Nodes)
      • 2.动作节点(Action Nodes)
  • 二、Oozie安装
    • 1、配置maven环境
      • 1.打开文件
      • 2.输入以下内容
    • 4、验证maven仓库是否配置完成
    • 2、下载资源
    • 3、编译安装
    • 4、安装Oozie
    • 5、Hadoop配置修改
      • 1.core-site.xml
      • 2.mappred-site.xml
      • 3.yarn-site.xml
    • 6、部署Oozie
    • 7、修改oozie-site.xml
    • 8、在mysql中创建Oozie数据库
    • 9、初始化Oozie
    • 10、Oozie的开启与关闭
    • 11、Oozie的web页面
  • 三、Oozie的使用
    • 1、Oozie调度shell脚本
      • 1.初始化工作
      • 2.配置
        • 1)job.properties
        • 2)workflow.xml
      • 3.任务
    • 2、Oozie调度执行多个job
      • 1.初始化工作
      • 2.配置
        • 1)job.properties
        • 2)workflow.xml
      • 3.任务
    • 3、Oozie调度MapReduce任务
      • 1.初始化工作
      • 2.配置
        • 1)job.properties
        • 2)workflow.xml
      • 3.任务
    • 4、Oozie定时任务
      • 1.时区检查
      • 2.初始化工作
      • 3.配置
        • 1)job.properties
        • 2)coordinator.xml
        • 3)workflow.xml
      • 3.任务

一、oozie

Oozie英文翻译为:驯象人。一个基于工作流引擎的开源框架,由Cloudera公司贡献给Apache,提供对Hadoop MapReduce、Pig Jobs的任务调度与协调。Oozie需要部署到Java Servlet容器中运行。主要用于定时调度任务,多任务可以按照执行的逻辑顺序调度。

1、Oozie模块

1.Workflow

顺序执行流程节点,支持fork(分支多个节点),join(合并多个节点为一个)

2.Coordinator

定时触发workflow

3.Bundle Job

绑定多个Coordinator

2、Oozie的常用节点

1.控制流节点(Control Flow Nodes)

控制流节点一般都是定义在工作流开始或者结束的位置,比如start,end,kill等。以及提供工作流的执行路径机制,如decision,fork,join等。

2.动作节点(Action Nodes)

负责执行具体动作的节点,比如:拷贝文件,执行某个Shell脚本等等。

二、Oozie安装

1、配置maven环境

1.打开文件

#打开配置文件
vim /opt/software/maven384/conf/settings.xml
#创建本地仓库
mkdir /opt/software/maven384/ck

2.输入以下内容

<!--本地maven仓库地址-->
<localRepository>/opt/software/maven384/ck</localRepository>
<!--配置阿里的maven仓库--><mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf></mirror>
<!--配置华为的maven仓库--><mirror><id>huaweicloud</id><mirrorOf>*</mirrorOf><url>https://mirrors.huaweicloud.com/repository/maven/</url></mirror>

4、验证maven仓库是否配置完成

#查看maven版本信息,验证maven是否安装成功
mvn -v
#--------------------------------------------------------------------------------------
Apache Maven 3.8.4 (9b656c72d54e5bacbed989b64718c159fe39b537)
Maven home: /opt/software/maven384
Java version: 1.8.0_171, vendor: Oracle Corporation, runtime: /opt/software/jdk8/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.45.1.el7.x86_64", arch: "amd64", family: "unix"
#--------------------------------------------------------------------------------------

2、下载资源

#oozie源码下载
wget http://archive.apache.org/dist/oozie/4.3.1/oozie-4.3.1.tar.gz

3、编译安装

#解压Oozie
tar -zxvf oozie-4.3.1.tar.gz
#切换到Oozie文件夹中
cd oozie-4.3.1
#编辑pom.xml文件修改hadoop等版本信息
vim pom.xml
#切换到bin文件夹中
cd bin
#执行手工编译命令,指定hadoop的版本信息为3.1.3
./mkdistro.sh  -DskipTests -Dhadoop.version=3.1.3 -Puber

4、安装Oozie

#解压安装包
tar -zxvf oozie-4.3.1.tar.gz -C /opt/software/
#配置环境变量
vim /etc/profile.d/my.sh
#------------------------------------------
#OOZIE
export OOZIE_HOME=/opt/software/oozie-4.3.1
export PATH=$PATH:$OOZIE_HOME/bin
vim /etc/profile.d/my.sh
#------------------------------------------

5、Hadoop配置修改

1.core-site.xml

<!-- Oozie Server的Hostname -->
<property><name>hadoop.proxyuser.atguigu.hosts</name><value>*</value>
</property><!-- 允许被Oozie代理的用户组 -->
<property><name>hadoop.proxyuser.atguigu.groups</name><value>*</value>
</property>

2.mappred-site.xml

<!-- 配置 MapReduce JobHistory Server 地址 ,默认端口10020 -->
<property><name>mapreduce.jobhistory.address</name><value>hadoop102:10020</value>
</property><!-- 配置 MapReduce JobHistory Server web ui 地址, 默认端口19888 -->
<property><name>mapreduce.jobhistory.webapp.address</name><value>hadoop102:19888</value>
</property>

3.yarn-site.xml

<!-- 任务历史服务 -->
<property> <name>yarn.log.server.url</name> <value>http://hadoop102:19888/jobhistory/logs/</value>
</property>

6、部署Oozie

#切换到Oozie文件夹中
cd oozie
#创建文件夹
mkdir libext/
#将hadoop的libs文件夹的文件拷贝到libext文件中
cp ${HADOOP_HOME}/share/hadoop/*/*.jar libext/
cp ${HADOOP_HOME}/share/hadoop/*/lib/*.jar libext/
#拷贝mysql驱动包
cp ext-2.2.zip libext/
cp mysql-connector-java-5.1.35-bin.jar libext/

7、修改oozie-site.xml

<!--
需要配置如下的内容:属性:oozie.service.JPAService.jdbc.driver
属性值:com.mysql.jdbc.Driver
解释:JDBC的驱动属性:oozie.service.JPAService.jdbc.url
属性值:jdbc:mysql://single01:3306/oozie
解释:oozie所需的数据库地址属性:oozie.service.JPAService.jdbc.username
属性值:root
解释:数据库用户名属性:oozie.service.JPAService.jdbc.password
属性值:ok
解释:数据库密码属性:oozie.service.HadoopAccessorService.hadoop.configurations
属性值:*=/opt/software/hadoop313/etc/hadoop/
解释:让Oozie引用Hadoop的配置文件
-->
<property> <name>oozie.service.JPAService.jdbc.driver</name> <value>com.mysql.jdbc.Driver</value>
</property>
<property> <name>oozie.service.JPAService.jdbc.url</name> <value>jdbc:mysql://single01:3306/oozie</value>
</property>
<property> <name>oozie.service.JPAService.jdbc.username</name> <value>root</value>
</property>
<property> <name>oozie.service.JPAService.jdbc.password</name> <value>ok</value>
</property>
<property> <name>oozie.service.HadoopAccessorService.hadoop.configurations</name> <value>*=/opt/software/hadoop313/etc/hadoop/</value>
</property>

8、在mysql中创建Oozie数据库

#登录mysql
mysql -uroot -pok
#创建Oozie数据库
mysql> create database oozie;

9、初始化Oozie

vim oozie-4.3.0/oozie-server/conf/server.xml
#取消注释
<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
#打包
./oozie-setup.sh prepare-war

10、Oozie的开启与关闭

#开启Oozie
oozied.sh start
#关闭Oozie
oozied.sh stop

11、Oozie的web页面

#访问Oozie页面的URL地址
http://single01:11000/oozie

三、Oozie的使用

1、Oozie调度shell脚本

1.初始化工作

#解压官方案例模板
tar -zxvf oozie-examples.tar.gz
#创建工作目录
mkdir oozie-apps/
#拷贝模板
cp -r examples/apps/shell/  oozie-apps
#编写脚本p1.shvim oozie-apps/shell/p1.sh
#----------------------------------
#!/bin/bash
/sbin/ifconfig > /opt/module/p1.log
#----------------------------------

2.配置

1)job.properties

#HDFS地址
nameNode=hdfs://single01:8020
#ResourceManager地址
jobTracker=single01:8032
#队列名称
queueName=default
examplesRoot=oozie-apps
oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/shell
EXEC=p1.sh

2)workflow.xml

<workflow-app xmlns="uri:oozie:workflow:0.4" name="shell-wf">
<start to="shell-node"/>
<action name="shell-node"><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><!-- <argument>my_output=Hello Oozie</argument> --><file>/user/atguigu/oozie-apps/shell/${EXEC}#${EXEC}</file><capture-output/></shell><ok to="end"/><error to="fail"/>
</action>
<decision name="check-output"><switch><case to="end">${wf:actionData('shell-node')['my_output'] eq 'Hello Oozie'}</case><default to="fail-output"/></switch>
</decision>
<kill name="fail"><message>Shell action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<kill name="fail-output"><message>Incorrect output, expected [Hello Oozie] but was [${wf:actionData('shell-node')['my_output']}]</message>
</kill>
<end name="end"/>
</workflow-app>

3.任务

#上传任务配置
hadoop fs -put oozie-apps/ /user
#执行任务
oozie job -oozie http://single01:11000/oozie -config oozie-apps/shell/job.properties -run
#杀死任务
oozie job -oozie http://ingle01:11000/oozie -kill 0000004-170425105153692-oozie-z-W

2、Oozie调度执行多个job

1.初始化工作

#解压官方案例模板
tar -zxvf oozie-examples.tar.gz
#创建工作目录
mkdir oozie-apps/
#拷贝模板
cp -r examples/apps/shell/  oozie-apps
#编写脚本p2.sh
vim oozie-apps/shell/p2.sh
#----------------------------------
#!/bin/bash
/sbin/ifconfig > /opt/module/p2.log
#----------------------------------

2.配置

1)job.properties

nameNode=hdfs://single01:8020
jobTracker=single01:8032
queueName=default
examplesRoot=oozie-appsoozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/shell
EXEC1=p1.sh
EXEC2=p2.sh

2)workflow.xml

<workflow-app xmlns="uri:oozie:workflow:0.4" name="shell-wf"><start to="p1-shell-node"/><action name="p1-shell-node"><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>${EXEC1}</exec><file>/user/atguigu/oozie-apps/shell/${EXEC1}#${EXEC1}</file><!-- <argument>my_output=Hello Oozie</argument>--><capture-output/></shell><ok to="p2-shell-node"/><error to="fail"/></action><action name="p2-shell-node"><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>${EXEC2}</exec><file>/user/admin/oozie-apps/shell/${EXEC2}#${EXEC2}</file><!-- <argument>my_output=Hello Oozie</argument>--><capture-output/></shell><ok to="end"/><error to="fail"/></action><decision name="check-output"><switch><case to="end">${wf:actionData('shell-node')['my_output'] eq 'Hello Oozie'}</case><default to="fail-output"/></switch></decision><kill name="fail"><message>Shell action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message></kill><kill name="fail-output"><message>Incorrect output, expected [Hello Oozie] but was [${wf:actionData('shell-node')['my_output']}]</message></kill><end name="end"/>
</workflow-app>

3.任务

#上传任务配置
hadoop fs -put oozie-apps/ /user
#执行任务
oozie job -oozie http://single01:11000/oozie -config oozie-apps/shell/job.properties -run
#杀死任务
oozie job -oozie http://ingle01:11000/oozie -kill 0000004-170425105153692-oozie-z-W

3、Oozie调度MapReduce任务

1.初始化工作

#解压官方案例模板
tar -zxvf oozie-examples.tar.gz
#创建工作目录
mkdir oozie-apps/
#拷贝模板
cp -r examples/apps/shell/  oozie-apps
#编写脚本p3.sh
vim oozie-apps/shell/p3.sh
#----------------------------------
#!/bin/bash
/sbin/ifconfig > /opt/module/p3.log
#----------------------------------

2.配置

1)job.properties

nameNode=hdfs://single01:8020
jobTracker=single01:8032
queueName=default
examplesRoot=oozie-apps
#hdfs://hadoop102:8020/user/admin/oozie-apps/map-reduce/workflow.xml
oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/map-reduce/workflow.xml
outputDir=map-reduce

2)workflow.xml

<workflow-app xmlns="uri:oozie:workflow:0.2" name="map-reduce-wf"><start to="mr-node"/><action name="mr-node"><map-reduce><job-tracker>${jobTracker}</job-tracker><name-node>${nameNode}</name-node><prepare><delete path="${nameNode}/output/"/></prepare><configuration><property><name>mapred.job.queue.name</name><value>${queueName}</value></property><!-- 配置调度MR任务时,使用新的API --><property><name>mapred.mapper.new-api</name><value>true</value></property><property><name>mapred.reducer.new-api</name><value>true</value></property><!-- 指定Job Key输出类型 --><property><name>mapreduce.job.output.key.class</name><value>org.apache.hadoop.io.Text</value></property><!-- 指定Job Value输出类型 --><property><name>mapreduce.job.output.value.class</name><value>org.apache.hadoop.io.IntWritable</value></property><!-- 指定输入路径 --><property><name>mapred.input.dir</name><value>/input/</value></property><!-- 指定输出路径 --><property><name>mapred.output.dir</name><value>/output/</value></property><!-- 指定Map类 --><property><name>mapreduce.job.map.class</name><value>org.apache.hadoop.examples.WordCount$TokenizerMapper</value></property><!-- 指定Reduce类 --><property><name>mapreduce.job.reduce.class</name><value>org.apache.hadoop.examples.WordCount$IntSumReducer</value></property><property><name>mapred.map.tasks</name><value>1</value></property></configuration></map-reduce><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>

3.任务

#上传任务配置
hadoop fs -put oozie-apps/ /user
#执行任务
oozie job -oozie http://single01:11000/oozie -config oozie-apps/shell/job.properties -run
#杀死任务
oozie job -oozie http://ingle01:11000/oozie -kill 0000004-170425105153692-oozie-z-W

4、Oozie定时任务

1.时区检查

#检查系统当前时区
date -R
#删除时区(时区不对时执行)
rm -rf /etc/localtime
#重新设置时区
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#同步时间
ntpdate pool.ntp.org
#修改NTP配置文件
vim /etc/ntp.conf
#--------------------------------------------------------
#去掉下面这行前面的# ,并把网段修改成自己的网段:
restrict 192.168.122.0 mask 255.255.255.0 nomodify notrap
#注释掉以下几行:
#server 0.centos.pool.ntp.org
#server 1.centos.pool.ntp.org
#server 2.centos.pool.ntp.org
#把下面两行前面的#号去掉,如果没有这两行内容,需要手动添加
server  127.127.1.0    # local clock
fudge  127.127.1.0 stratum 10
#--------------------------------------------------------
#重启NTP服务
systemctl start ntpd.service

2.初始化工作

#解压官方案例模板
tar -zxvf oozie-examples.tar.gz
#创建工作目录
mkdir oozie-apps/
#拷贝模板
cp -r examples/apps/shell/  oozie-apps
#编写脚本p3.sh
vim oozie-apps/shell/p3.sh
#----------------------------------
#!/bin/bash
/sbin/ifconfig > /opt/module/p3.log
#----------------------------------

3.配置

1)job.properties

nameNode=hdfs://single01:8020
jobTracker=single01:8032
queueName=default
examplesRoot=oozie-apps
#hdfs://hadoop102:8020/user/admin/oozie-apps/map-reduce/workflow.xml
oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/map-reduce/workflow.xml
outputDir=map-reduce
EXEC3=p3.sh

2)coordinator.xml

<coordinator-app name="cron-coord" frequency="${coord:minutes(5)}" start="${start}" end="${end}" timezone="GMT+0800" xmlns="uri:oozie:coordinator:0.2">
<action><workflow><app-path>${workflowAppUri}</app-path><configuration><property><name>jobTracker</name><value>${jobTracker}</value></property><property><name>nameNode</name><value>${nameNode}</value></property><property><name>queueName</name><value>${queueName}</value></property></configuration></workflow>
</action>
</coordinator-app>

3)workflow.xml

<workflow-app xmlns="uri:oozie:workflow:0.5" name="one-op-wf">
<start to="p3-shell-node"/><action name="p3-shell-node"><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>${EXEC3}</exec><file>/user/atguigu/oozie-apps/cron/${EXEC3}#${EXEC3}</file><!-- <argument>my_output=Hello Oozie</argument>--><capture-output/></shell><ok to="end"/><error to="fail"/></action>
<kill name="fail"><message>Shell action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<kill name="fail-output"><message>Incorrect output, expected [Hello Oozie] but was [${wf:actionData('shell-node')['my_output']}]</message>
</kill>
<end name="end"/>
</workflow-app>

3.任务

#上传任务配置
hadoop fs -put oozie-apps/ /user
#执行任务
oozie job -oozie http://single01:11000/oozie -config oozie-apps/shell/job.properties -run
#杀死任务
oozie job -oozie http://ingle01:11000/oozie -kill 0000004-170425105153692-oozie-z-W

大数据调度工具之Oozie相关推荐

  1. 主流大数据调度工具对比(DolphinScheduler特点)

    大数据环境下,调度工具比不可少,离线批任务和准实时任务都需要调度去驱动.下文介绍主流大数据调度工具对比DolphinScheduler .Azkaban.Airflow.Oozie.Xxl-job A ...

  2. 主流大数据调度工具对比

    大数据环境下,调度工具比不可少,离线批任务和准实时任务都需要调度去驱动.下文介绍主流大数据调度工具对比DolphinScheduler .Azkaban.Airflow.Oozie.Xxl-job 非 ...

  3. Apache DolphinScheduler征稿 — 小Demo轻松入门DolphinSchedule大数据调度工具

    文章目录 官方文档 | [GitHub源码](https://github.com/apache/dolphinscheduler) 一.从实际需求入手,我们为何要选择使用DolphinSchched ...

  4. 大数据调度系统为什么选型Apache DolphinScheduler ?

    table of contents 一 .背景 二 .定位 三 .案例 四 .竟品对比 五 .DolphinScheduler简介 六 .社区发展 七.性能数据参考 一 .背景 今天跟客户聊天的时候, ...

  5. 大数据人推荐:60款顶级大数据开源工具

    摘要:说到处理大数据的工具,普通的开源解决方案(尤其是Apache Hadoop)堪称中流砥柱. 弗雷斯特调研公司的分析师Mike Gualtieri最近预测,在接下来几年,"100%的大公 ...

  6. 大数据任务调度工具 Apache DolphinScheduler

    文章目录 大数据任务调度工具 Apache DolphinScheduler 项目亮点 DolphinScheduler 简介 调度系统选型 为什么大数据要选择 DolphinScheduler Do ...

  7. 大数据工程师常用的大数据BI工具是什么?

    大数据工程师常用的大数据BI工具是什么? [导语]目前,无论是大企业还是小企业,都面临着数字化转型的挑战.如何在大数据中获得更好地洞察力,有效改善用户体验,同时达到优化生产力的效果,这时候进行数据分析 ...

  8. 当我们在聊「开源大数据调度系统Taier」的数据开发功能时,到底在讨论什么?

    原文链接:当我们在聊「开源大数据调度系统Taier」的数据开发功能时,到底在讨论什么? 课件获取:关注公众号__ "数栈研习社",后台私信 "Taier"__ ...

  9. 大数据调度平台之Rundeck生产实践

    一.大数据调度平台有哪些? 1.1.安装部署Rundeck 1.2.Rundeck配置QQ邮箱服务 二.Rundeck调度shell脚本任务 一.大数据调度平台有哪些? 1.XXL-JOB.Runde ...

  10. 大数据——Impala工具使用

    目录 一.Impala概述 二.Impala优点 三.Impala和Hive 3.1 Impala和Hive的关系 3.2 Impala和Hive的区别 五.Impala查询过程 六.Impala安装 ...

最新文章

  1. 比特大陆发力边缘计算,详解终端AI芯片BM1880
  2. dnscat使用——整体感觉这个工具不完善,失败率很高,传文件时候没有完整性校验,我自己测试时通过域名转发失败,可能是其特征过于明显导致...
  3. 最长公共子序列Java代码实现
  4. GNU编译优化级别-O -O1 -O2 -O3
  5. JAVA world转图片,将Kinect深度图像转换为真实世界坐标
  6. mysql关系模式怎么画_关系数据库与mysql
  7. linux mysql temp 设置_linux怎么修改mysql数据库临时表空间大小
  8. python自定义assert抛出的异常
  9. VC中利用ADO共同实现数据库的操作
  10. 市场上主要的PB系统提供商简介
  11. 自己的域名邮箱用GMAIL:申请注册GMAIL的免费企业邮箱
  12. C++第14周项目1 - 动物怎么叫
  13. 白岩松:40岁左右的男人,比你想象中更难
  14. 什么是指纹浏览器,修改浏览器指纹工具
  15. Adobe Flash被禁用和无法加载的官方解决办法
  16. 详细讲解vue2组件通信(一)——父传子props
  17. 面对疫情,我们普通人能做什么?
  18. 性能优化之YUICompressor压缩JS、CSS
  19. 个人计算机和家用计算机的区别,量子计算机与普通计算机的区别?
  20. 使用Github和Hexo搭建个人主页时报错 404 There isnt a GitHub Pages site here

热门文章

  1. 谭浩强C语言练习题及详细答案
  2. PTV-VISSIM交通仿真
  3. Java自学方法和路线,我万字推荐你这样学
  4. ofo容器pass架构分享
  5. java开发简历专业技能怎么写,附赠复习资料
  6. FMEA失效模式和影响分析中措施优先级AP值的方法
  7. 宋红康Java基础笔记
  8. 使用lex与yacc词法语法工具进行简单的SQL语义检查
  9. FORTAN中一个表达式多行
  10. 远程580解锁bl工具_一年让你多挣4万的工具丨又增VIVO新款保资料解锁!