目录

  • 一、问题引入
  • 二、常见的几个工作流调度框架
  • 三、Oozie的功能架构
  • 四、Oozie下载与安装安装
  • 第一步:安装软件
  • (1)上传文件
  • (2)解压文件
  • 第二步:配置文件
  • (1)配置core-site.xml文件
  • (2)解压文件
  • (3)创建目录
  • (4)拷贝jar包
  • (5)打成war包
  • (6)上传至HDFS
  • (7)创建oozie的DB数据库
  • (8)运行测试
  • 五、运行测试一个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架构图如下:

oozie cdh下载_java


oozie包含四大服务组件:

  • workflow: 用于支持动作有向无环图(DAG)的设计和执行,可以按照特定的顺序执行mr,hive和shell等节点.
  • coordinator: 用于定时调度特定的 workflow 进行执行,可以基于事件,资源存在,传递参数等自动执行.
  • bundle: 批量设定一组coordinator执行.
  • SLA(Service Level Agreement, oozie服务器等级协定): 用于程序执行过程的日志跟踪.

Oozie简易架构:

oozie cdh下载_hadoop_02


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

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

一个有向无环图:

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

oozie cdh下载_oozie cdh下载_03


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

oozie cdh下载_hadoop_04


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

oozie cdh下载_java_05


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:///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/ 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/  sharelib create -fs hdfs://bigdata-pro-m01:9000 -locallib oozie-sharelib-4.1.0-cdh5.9.3-yarn.tar.gz

oozie cdh下载_apache_06

(7)创建oozie的DB数据库

创建oozie的DB数据库
运行命令:

bin/ create -sqlfile oozie.sql -run DB Connection
(8)运行测试

启动oozie进程

bin/ start

oozie cdh下载_java_07


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

oozie cdh下载_hadoop_08

五、运行测试一个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.查看运行结果

oozie cdh下载_apache_09

六、出现的问题及解决

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

/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 .ActionStartXCommand.execute(ActionStartXCommand.java:232)
        at .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/ stop
bin/ 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: .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>

以上内容仅供参考学习,如有侵权请联系我删除!