Oozie的功能架构与下载安装详解!(亲测有效)

简介: 笔记

一、问题引入


问题引入1:什么是工作流调度

按照前面的一个案例,为了完成得出结果的这一件事,我们要完成以下的操作。

数据加载到hive -> 数据的分析 -> sqoop数据结果导出到mysql

每一个操作步骤我们可以看成一个action-job,每一个action-job都可能在不同的时间点完成,比如说凌晨0点完成job1的加载数据,凌晨1点完成数据分析,凌晨2点完成sqoop数据导出:

00(action job-1)  01(action job-2)  02(action job-3)
     load data          MR                Sqoop

对于上面不同时间点完成不同的工作,我们不可能人工的每个时间点去执行每个工作,这个样会极大的消耗工作精力和降低工作效率,这时我们需要一个工作流调度框架对上面的工作进行管理,控制每个时间点去执行每个工作任务。

start(时间点)
action-1
action-2
action-3
end(任务结束) 

问题引入2:为什么需要任务调度框架

在进行数据处理的时候,需要进行数据采集、数据清洗、数据分析等操作,每一个过程都可能涉及到多个步骤,有的需要顺序执行,有的可以并行执行。如何方便,有效的管理这些任务的执行顺序和依赖关系,这就是任务调度框架的作用。


二、常见的几个工作流调度框架


Azkaban

是有Linkedin开源的一个批量工作流任务调度器,用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban定义了一种键值对文件格式来建立任务之间的依赖关系,并提供友好的web界面维护和查看工作流。特点:方便的设置任务流;能够杀死并重新启动工作流;工作流和任务的日志记录。


Zeus

是阿里公司开源的任务调度框架。其特点是:方便Hive任务的调试运行;Hive元数据的可视化查询与数据预览。


Linux crontab

是linux的定时任务工具,也可以用来作为简单的任务调度框架。


Oozie

Oozie由Cloudera公司贡献给Apache的基于工作流引擎的开源框架,是用于Hadoop平台的开源的工作流调度引擎,是用来管理Hadoop作业,属于web应用程序,由Oozie client和Oozie Server两个组件构成,Oozie Server运行于Java Servlet容器(Tomcat)中的web程序。


oozie官网:

http://oozie.apache.org/


三、Oozie的功能架构


oozie架构图如下:1.png

oozie包含四大服务组件:


workflow: 用于支持动作有向无环图(DAG)的设计和执行,可以按照特定的顺序执行mr,hive和shell等节点.

coordinator: 用于定时调度特定的 workflow 进行执行,可以基于事件,资源存在,传递参数等自动执行.

bundle: 批量设定一组coordinator执行.

SLA(Service Level Agreement, oozie服务器等级协定): 用于程序执行过程的日志跟踪.

Oozie简易架构:


2.png

如上图,oozie调度本身就是一个mr程序,开始,执行,结束或者失败,简单易懂.

所以我们可以思考一下,在oozie调度mr程序时,其实同一时间是运行了两个mr的,一个是调度本身,一个是任务.

一个有向无环图:

任务本身是一个有向无环图(DAG)

3.png

图中fork标签后面的 MR job 和 Hive job 是并行执行的,都成功后通过 join 节点合并.

coordinator生命周期:

4.png

coordinator是一个定时服务,通过定时来固定频率的执行任务,这里的功能类似crontab.

bundle Job:

5.png

bundle的作用就是设定多个coordinator定时服务按批次执行,这样使得多个任务也形成一个DAG.


四、Oozie下载与安装安装


电脑系统:macOS 10.15.4

虚拟机软件:Parallels Desktop14

Hadoop各节点节点操作系统:CentOS 7

JDK版本:jdk1.8.0_162

Hadoop版本:hadoop-2.6.0-cdh5.9.3

Oozie版本:oozie-4.1.0-cdh5.9.3.tar.gz

Ooize CDH版本的下载地址:

https://archive.cloudera.com/cdh5/cdh/5/

Oozie官网:

http://oozie.apache.org/


第一步:安装软件

(1)上传文件

将本机的安装包上传到虚拟机node1,上传方式:

scp 本机的文件绝对路径 caizhengjie@10.211.55.75:/opt/softwares

(2)解压文件

上传成功之后需要对文件赋予权限

chmod u+x oozie-4.1.0-cdh5.9.3.tar.gz


解压文件:

tar -zxvf oozie-4.1.0-cdh5.9.3.tar.gz -C /opt/modules/


创建软链接:

ln -s oozie-4.1.0-cdh5.9.3 oozie


第二步:配置文件


(1)配置core-site.xml文件

在core-site.xml文件中配置如下的两个项目

  <property>
    <name>hadoop.proxyuser.caizhengjie.hosts</name>
    <value>bigdata-pro-m01</value>
  </property>
  <property>
    <name>hadoop.proxyuser.caizhengjie.groups</name>
    <value>*</value>
  </property>

bigdata-pro-m01为安装oozie的那台机器

caizhengjie为用户名


修改完配置文件之后重启Hadoop


(2)解压文件

解压oozie-hadooplibs-4.1.0-cdh5.9.3.tar.gz,放在安装oozie的根目录下

tar -zxvf oozie-hadooplibs-4.1.0-cdh5.9.3.tar.gz -C ../

(3)创建目录

在安装oozie目录下创建一个目录libext/

mkdir libext

(4)拷贝jar包

拷贝hadooplibs/hadooplib-2.6.0-cdh5.5.0.oozie-4.1.0-cdh5.5.0/目录下的的所有jar包和ext-2.2.zip拷贝到libext目录下

[caizhengjie@bigdata-pro-m01 libext]$ cp ../hadooplibs/hadooplib-2.6.0-cdh5.9.3.oozie-4.1.0-cdh5.9.3/* .
[caizhengjie@bigdata-pro-m01 libext]$ cp /opt/softwares/ext-2.2.zip .

(5)打成war包

将libext目录下的jar包和ext文件打成war包放到webapp目录下

运行命令:

bin/oozie-setup.sh prepare-war


  New Oozie WAR file with added 'ExtJS library, JARs' at /opt/modules/oozie/oozie-server/webapps/oozie.war

(6)上传至HDFS

将oozie-sharelib-4.1.0-cdh5.9.3-yarn.tar.gz上传到hdfs上,默认会自动解压,放在/user/caizhengjie/share/lib/lib_20201102150154目录下

运行命令:

bin/oozie-setup.sh  sharelib create -fs hdfs://bigdata-pro-m01:9000 -locallib oozie-sharelib-4.1.0-cdh5.9.3-yarn.tar.gz

6.png

(7)创建oozie的DB数据库

创建oozie的DB数据库

运行命令:

bin/ooziedb.sh create -sqlfile oozie.sql -run DB Connection

(8)运行测试

启动oozie进程

bin/oozied.sh start


7.png

访问一下web界面:http://bigdata-pro-m01:11000/oozie/,端口默认是11000

8.png


五、运行测试一个oozie实例


运行实例的步骤:

1.解压oozie-examples.tar.gz这个文件到安装目录

tar -zxvf oozie-examples.tar.gz

2.上传oozie-examples.tar.gz解压之后的目录文件到HDFS的用户根目录下

bin/hdfs dfs -put /opt/modules/oozie-4.1.0-cdh5.5.0/examples examples

3.修改examples/apps/map-reduce/job.properties的配置:

nameNode=hdfs://bigdata-pro-m01.kfk.com:9000
jobTracker=bigdata-pro-m01.kfk.com:8032

4.运行example

bin/oozie job -oozie http://bigdata-pro-m01:11000/oozie -config examples/apps/map-reduce/job.properties -run

运行oozie workflow相关的文件的说明:

 1)workflow.xml 文件       -------这个文件必须放在HDFS上
   start  ->  action(ok,error)  ->  kill  ->  end 
 2)job.properties 文件    --------必须要在本地
   属性配置文件,参数提供给workflow.xml文件
 3)lib目录                --------必须要在HDFS上
   相关的依赖包全部放在lib目录 
如果要修改了workflow.xml 文件和lib,就必须重新上传到HDFS,job.properties文件修改了可以不用上传,但必须放在本地目录下

5.查看运行结果

9.png


六、出现的问题及解决


遇到问题,可以去查看日志文件,日志文件在

/opt/modules/oozie/logs/oozie.log

问题一:

 ] JOB[0000000-201102150941677-oozie-caiz-W] ACTION[0000000-201102150941677-oozie-caiz-W@mr-node] Error starting action [mr-node]. ErrorType [FAILED], ErrorCode [It should never happen], Message [File /user/caizhengjie/share/lib does not exist]
org.apache.oozie.action.ActionExecutorException: File /user/caizhengjie/share/lib does not exist
        at org.apache.oozie.action.hadoop.JavaActionExecutor.addSystemShareLibForAction(JavaActionExecutor.java:728)
        at org.apache.oozie.action.hadoop.JavaActionExecutor.addAllShareLibs(JavaActionExecutor.java:806)
        at org.apache.oozie.action.hadoop.JavaActionExecutor.setLibFilesArchives(JavaActionExecutor.java:797)
        at org.apache.oozie.action.hadoop.JavaActionExecutor.submitLauncher(JavaActionExecutor.java:1052)
        at org.apache.oozie.action.hadoop.JavaActionExecutor.start(JavaActionExecutor.java:1315)
        at org.apache.oozie.command.wf.ActionStartXCommand.execute(ActionStartXCommand.java:232)
        at org.apache.oozie.command.wf.ActionStartXCommand.execute(ActionStartXCommand.java:63)
        at org.apache.oozie.command.XCommand.call(XCommand.java:286)
        at org.apache.oozie.service.CallableQueueService$CompositeCallable.call(CallableQueueService.java:332)
        at org.apache.oozie.service.CallableQueueService$CompositeCallable.call(CallableQueueService.java:261)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at org.apache.oozie.service.CallableQueueService$CallableWrapper.run(CallableQueueService.java:179)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

这是因为没有找到HDFS上这个文件/user/caizhengjie/share/lib,需要在配置文件中添加

解决方法:

在oozie-site.xml文件中添加如下的属性项

<property>
    <name>oozie.service.HadoopAccessorService.hadoop.configurations</name>
    <value>*=/opt/modules/hadoop/etc/hadoop</value>
</property>

再次重新启动oozie

bin/oozied.sh stop
bin/oozied.sh start

再次运行

bin/oozie job -oozie http://bigdata-pro-m01:11000/oozie -config examples/apps/map-reduce/job.properties -run

问题二:

http://wiki.apache.org/hadoop/ConnectionRefused]
org.apache.oozie.action.ActionExecutorException:   JA006: Call From bigdata-pro-m03.kfk.com/192.168.5.103 to 0.0.0.0:10020 failed on connection exception: java.net.ConnectException: Connection refused; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused
  at org.apache.oozie.action.ActionExecutor.convertExceptionHelper(ActionExecutor.java:454)

这是因为oozie安装的节点没有连到jobhistoryserver的地址

解决方法:

1.启动jobhistoryserver

2.在core-site.xml文件中添加如下的属性项

<property>
  <name>mapreduce.jobhistory.address</name>
  <value>bigdata-pro-m01.kfk.com:10020</value>
</property>
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
7月前
|
存储 物联网 数据管理
使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(12)
现在到了使用Apache IoTDB进行IoT相关开发的架构设计与功能实现的最后一个环境,在本文中我将向大家介绍IoTDB的查询语言。IoTDB为咱们广大开发者提供了类似SQL的查询语言,用于与IoTDB进行交互,查询语言可以分为4个主要部分:架构语句、数据管理语句、数据库管理语句、功能。
135 0
|
7月前
|
SQL 物联网 Apache
使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(11)
目前,IoTDB中不存在冲突的权限,因此用户的真正权限是用户自身权限和用户角色权限的结合。也就是说,要确定用户是否可以执行操作,取决于用户自己的权限之一或用户角色的权限是否允许该操作。用户自己的特权和用户角色的特权可能会重叠,但这并不重要。
129 1
|
6月前
|
存储 前端开发 JavaScript
潮玩宇宙大逃杀无聊猿卷轴模式系统开发详细规则丨步骤需求丨方案项目丨技术架构丨源码功能
确定游戏类型和规则:明确无聊猿卷轴模式游戏类型和游戏规则,包括敌人类型、地图设计、任务类型、战斗机制等。
|
7月前
|
SQL 传感器 物联网
使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(10)
物联网提供限制/限制条款和偏移/偏移子句,以使用户对查询结果有更多的控制权。使用 LIMIT 和 SLIMIT 子句允许用户控制查询结果的行数和列数,使用 OFFSET 和 SOFSET 子句允许用户设置结果的起始位置进行显示。
|
1月前
|
NoSQL Java Redis
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的分布式锁的功能组件(二)
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的分布式锁的功能组件
15 0
|
1月前
|
运维 Linux Apache
LAMP架构调优(三)——模块的安装与调用
LAMP架构调优(三)——模块的安装与调用
9 0
|
1月前
|
SQL 存储 数据管理
数据库系统架构与DBMS功能探微:现代信息时代数据管理的关键
数据库系统架构与DBMS功能探微:现代信息时代数据管理的关键
36 1
|
1月前
|
架构师 算法 关系型数据库
数据库架构师之道:MySQL安装与系统整合指南
数据库架构师之道:MySQL安装与系统整合指南
46 0
|
2月前
|
消息中间件 架构师 NoSQL
以架构师的视角,深入剖析如何设计订单超时自动取消的功能
我们在美团 APP 下单,假如没有立即支付,进入订单详情会显示倒计时,如果超过支付时间,订单就会被自动取消。 这篇文章,笔者想以架构师的视角,深入剖析如何设计订单超时自动取消的功能。
以架构师的视角,深入剖析如何设计订单超时自动取消的功能
|
3月前
|
Kubernetes 容器
ChaosBlade的Helm安装双架构主要包括以下步骤
【1月更文挑战第22天】【1月更文挑战第109篇】ChaosBlade的Helm安装双架构主要包括以下步骤
116 1