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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 笔记

一、问题引入


问题引入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日志并进行多维度分析。
相关文章
|
11天前
|
Kubernetes 调度 算法框架/工具
NVIDIA Triton系列02-功能与架构简介
本文介绍了NVIDIA Triton推理服务器的功能与架构,强调其不仅适用于大型服务类应用,还能广泛应用于各类推理场景。Triton支持多种模型格式、查询类型和部署方式,具备高效的模型管理和优化能力,确保高性能和系统稳定性。文章详细解析了Triton的主从架构,包括模型仓库、客户端应用、通信协议和推理服务器的核心功能模块。
29 1
NVIDIA Triton系列02-功能与架构简介
|
9天前
|
机器学习/深度学习 存储 搜索推荐
NVIDIA Ampere 架构的结构化稀疏功能及其在搜索引擎中的应用
NVIDIA Ampere架构引入了结构化稀疏功能,显著加速了深度学习模型的推理过程。通过2:4的稀疏模式,即每4个相邻权重中有至少2个为0,实现了高效的内存访问和模型推理加速,同时保持了模型精度。腾讯机器学习平台部门利用这一特性,通过渐进式训练方法,实现了模型在搜索引擎中的高效部署与应用,如相关性预测、查询性能预测等场景,不仅提升了处理速度,还在某些情况下超过了原有模型的精度。此外,NVIDIA还提供了TensorRT和cuSPARSELt库,进一步增强了稀疏模型的推理效率。
13 0
 NVIDIA Ampere 架构的结构化稀疏功能及其在搜索引擎中的应用
|
14天前
|
SQL 分布式计算 Hadoop
Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL
Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL
37 3
|
1月前
|
存储 监控 数据可视化
SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
【9月更文挑战第2天】SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
105 9
|
2月前
|
Cloud Native
核心系统转型问题之平衡核心架构中的功能性与非功能性需求如何解决
核心系统转型问题之平衡核心架构中的功能性与非功能性需求如何解决
|
3月前
|
Kubernetes 调度 数据库
Kubernetes架构及安装
Kubernetes架构及安装
90 3
|
2月前
|
Ubuntu Windows
ARM架构安装ubuntu系统
8月更文挑战第19天
779 0
|
2月前
|
Kubernetes Docker 容器
使用 Kubeadm 部署 Kubernetes(K8S) 安装--附K8S架构图
使用 Kubeadm 部署 Kubernetes(K8S) 安装--附K8S架构图
226 0
|
3月前
|
负载均衡 监控 Kubernetes
Service Mesh 是一种用于处理服务间通信的基础设施层,它通常与微服务架构一起使用,以提供诸如服务发现、负载均衡、熔断、监控、追踪和安全性等功能。
Service Mesh 是一种用于处理服务间通信的基础设施层,它通常与微服务架构一起使用,以提供诸如服务发现、负载均衡、熔断、监控、追踪和安全性等功能。
|
2月前
|
运维 Kubernetes 索引
揭秘ChaosBlade的Helm安装双架构:一步到位,让系统故障测试变得前所未有的简单和高效!
【8月更文挑战第7天】在多变的IT环境中,确保应用的稳定与可用至关重要。混沌工程通过故意引入故障来增强系统韧性。ChaosBlade是一款开源混沌实验工具,支持多样化的故障注入。结合Kubernetes的包管理器Helm,可简化ChaosBlade在集群中的部署。本文介绍如何使用Helm安装ChaosBlade双架构版本,包括添加仓库、选择版本、安装配置及验证等步骤,助力高效实施混沌工程,提升系统稳定性和可靠性。
47 0