目录
- 一、问题引入
- 二、常见的几个工作流调度框架
- 三、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包含四大服务组件:
- workflow: 用于支持动作有向无环图(DAG)的设计和执行,可以按照特定的顺序执行mr,hive和shell等节点.
- coordinator: 用于定时调度特定的 workflow 进行执行,可以基于事件,资源存在,传递参数等自动执行.
- bundle: 批量设定一组coordinator执行.
- SLA(Service Level Agreement, oozie服务器等级协定): 用于程序执行过程的日志跟踪.
Oozie简易架构:
如上图,oozie调度本身就是一个mr程序,开始,执行,结束或者失败,简单易懂.
所以我们可以思考一下,在oozie调度mr程序时,其实同一时间是运行了两个mr的,一个是调度本身,一个是任务.
一个有向无环图:
任务本身是一个有向无环图(DAG)
图中fork标签后面的 MR job 和 Hive job 是并行执行的,都成功后通过 join 节点合并.coordinator生命周期:
coordinator是一个定时服务,通过定时来固定频率的执行任务,这里的功能类似crontab.bundle Job:
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
(7)创建oozie的DB数据库
创建oozie的DB数据库
运行命令:
bin/ create -sqlfile oozie.sql -run DB Connection
(8)运行测试
启动oozie进程
bin/ start
访问一下web界面:http://bigdata-pro-m01:11000/oozie/,端口默认是11000
五、运行测试一个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.查看运行结果
六、出现的问题及解决
遇到问题,可以去查看日志文件,日志文件在
/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>
以上内容仅供参考学习,如有侵权请联系我删除!