Oozie概述:
oozie是一个管理Hadoop生态圈job的工作流调度系统,由Cloudera公司贡献给Apache,Oozie是运行于javaServlet容器上的一个javaweb应用。Oozie的目的是按照DAG有向无环图调度一系列的Map/Reduce或者Hive等任务,Oozie工作流由hpdl(hadoop Process Definition Language) 定义一种XML流程定义语言。
适用场景:
需要按照顺序进行一系列的任务;
需要按照并行处理的任务;
需要定时,周期触发任务;
可视化作业运行过程;
运行结果或异常的通报;
oozie的架构:
oozie client: 提供命令行,java api rest 等方式,对oozie的工作流程的提交,启动,运行等操作。
oozie WebApp: 即oozie Server 本质是一个java应用,可以使用内置的web容器,也可以使用外置的web容器。
hadoop Cluster: 底层执行oozie编排流程的各个Hadoop生态圈组件。
oozie基本原理:
oozie对工作流的编排,是基于workflow.xml 文件来完成的。用户预先将工作流执行规则定制与workflow.xml文件中,
并在job.properties配置相关的参数,然后由oozie server向MR提交job来启动工作流。
流程节点:
工作流由两种类型的节点组成,分别是:
Control Flow Nodes: 控制工作流执行路径,包括start ,end,kill,decision,fork,join。
Action Nodes: 决定每个操作执行的任务类型,包括MapReduce,java,hive,shell等。
oozie工作流类型:
workflow:
规则相对简单,不涉及定时,批处理的工作流,顺序执行流程节点。workflow有个大缺点:没有定时和条件出发功能。
Coordinator:
coordinator将多个工作流job组织起来,称为Coordinator job ,并指定触发时间和频率,还可以配置数据集,并发数等,
类似于在工作流外部增加了一个协调器来管理这些工作流的工作流job的运行。
Bundle:
针对coordinator 的批处理工作流,Bunndle将多个Coordinator管理起来,这这样我们只需要一个Bundle提交即可。
oozie安装:
修改Hadoop相关配置:
修改hadoop的配置文件 core-site.xml
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
hadoop.proxyuser.root.hosts
允许通过httpfs方式访问hdfs的主机名、域名;
hadoop.proxyuser.root.groups
允许访问的客户端的用户组
配置jobhistory服务:
修改hadoop的配置文件mapred-site.xml
<property>
<name>mapreduce.jobhistory.address</name>
<value>node-1:10020</value>
<description>MapReduce JobHistory Server IPC host:port</description>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node-1:19888</value>
<description>MapReduce JobHistory Server Web UI host:port</description>
</property>
<!-- 配置运行过的日志存放在hdfs上的存放路径 -->
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/export/data/history/done</value>
</property>
<!-- 配置正在运行中的日志在hdfs上的存放路径 -->
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/export/data/history/done_intermediate</value>
</property>
启动history-server
mr-jobhistory-daemon.sh start historyserver
停止 history-server
mr-jobhistory-daemon.sh stop historyserver
通过浏览器访问 Hadoop jobhistory 的webUI
http://node-1:19888
重启hadoop 集群先关服务
上传oozie的安装包并解压:
oozie的安装包上传到/export/softwares
tar -zxvf oozie-4.1.0-cdh5.14.0.tar.gz
解压hadooplibs到与oozie平行的目录
cd /export/servers/oozie-4.1.0-cdh5.14.0
tar -zxvf oozie-hadooplibs-4.1.0-cdh5.14.0.tar.gz -C ../
添加相关依赖:
oozie的安装路径下创建libext目录
cd /export/servers/oozie-4.1.0-cdh5.14.0
mkdir -p libext
拷贝hadoop依赖包到libext
cd /export/servers/oozie-4.1.0-cdh5.14.0
cp -ra hadooplibs/hadooplib-2.6.0-cdh5.14.0.oozie-4.1.0-cdh5.14.0/* libext/
上传mysql的驱动包到libext
mysql-connector-java-5.1.32.jar
添加ext-2.2.zip压缩包到libext
ext-2.2.zip
修改oozie-site.xml
cd /export/servers/oozie-4.1.0-cdh5.14.0/conf
vim oozie-site.xml
oozie默认使用的是UTC的时区,需要在oozie-site.xml当中配置时区为GMT+0800时区
<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://node-1: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>hadoop</value>
</property>
<property>
<name>oozie.processing.timezone</name>
<value>GMT+0800</value>
</property>
<property>
<name>oozie.service.coord.check.maximum.frequency</name>
<value>false</value>
</property>
<property>
<name>oozie.service.HadoopAccessorService.hadoop.configurations</name>
<value>*=/export/servers/hadoop-2.7.5/etc/hadoop</value>
</property>
初始化mysql 相关信息:
上传oozie的解压后目录的下的yarn.tar.gz到hdfs目录
bin/oozie-setup.sh sharelib create -fs hdfs://node-1:9000 -locallib oozie-sharelib-4.1.0-cdh5.14.0-yarn.tar.gz
本质上就是将这些jar包解压到了hdfs上面的路径下面去
创建mysql数据库
mysql -uroot -p
create database oozie;
初始化创建oozie的数据库表
cd /export/servers/oozie-4.1.0-cdh5.14.0
bin/oozie-setup.sh db create -run -sqlfile oozie.sql
打包项目生产war包:
cd /export/servers/oozie-4.1.0-cdh5.14.0
bin/oozie-setup.sh prepare-war
配置oozie环境变量:
vim /etc/profile
export OOZIE_HOME=/export/servers/oozie-4.1.0-cdh5.14.0
export OOZIE_URL=http://node03.hadoop.com:11000/oozie
export PATH=$PATH:$OOZIE_HOME/bin
source /etc/profile
启动关闭oozie服务:
启动命令
cd /export/servers/oozie-4.1.0-cdh5.14.0
bin/oozied.sh start
关闭命令
bin/oozied.sh stop
启动的时候产生的 pid文件,如果是kill方式关闭进程 则需要删除该文件重新启动,否则再次启动会报错。
浏览器webUI页面:
http://node-1:11000/oozie/
解决oozie页面时区显示异常:
页面访问的时候,发现oozie使用的还是GMT的时区,与我们现在的时区相差一定的时间,所以需要调整一个js的获取时区的方法,将其改成我们现在的时区。
修改js当中时区问题:
cd oozie-server/webapps/oozie
vim oozie-console.js
function getTimeZone() {
Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
return Ext.state.Manager.get("TimezoneId","GMT+0800");
}
重启oozie即可
cd /export/servers/oozie-4.1.0-cdh5.14.0
bin/oozied.sh stop
bin/oozied.sh start