一、Oozie简介
Oozie英文翻译为:驯象人。一个基于工作流引擎的开源框架,由Cloudera公司贡献给Apache,提供对Hadoop Mapreduce、Pig Jobs的任务调度与协调。Oozie需要部署到Java Servlet容器中运行。主要用于定时调度任务,多任务可以按照执行的逻辑顺序调度。
二、Oozie的功能模块介绍
2.1 模块
(1) Workflow
顺序执行流程节点,支持fork(分支多个节点),join(合并多个节点为一个)
(2) Coordinator
定时触发workflow
(3) Bundle Job
绑定多个Coordinator
2.2 常用节点
(1) 控制流节点(Control Flow Nodes)
控制流节点一般都是定义在工作流开始或者结束的位置,比如start,end,kill等。以及提供工作流的执行路径机制,如decision,fork,join等。
(2) 动作节点(Action Nodes)
负责执行具体动作的节点,比如:拷贝文件,执行某个Shell脚本等等。
三、Oozie安装部署
3.1 上传解压Oozie
将oozie-4.1.0-cdh5.7.6.tar.gz上传到我们的linux服务器上,上传到**/opt/soft目录中(该目录保存上传的tar包)。
解压Oozie(我解压的路径为/opt/app**)
tar -zxvf oozie-4.1.0-cdh5.7.6.tar.gz /opt/app
3.2 配置环境变量
准备工作:同步集群时间
ntpdate ntp.sjtu.edu.cn
将解压后的oozie重命名
mv oozie-4.1.0-cdh5.7.6/ ooziemv
配置/etc/profile文件
vim /etc/profile(我这里用的VSCode修改配置文件,方便好用)
#oozie environment
export OOZIE_HOME=/opt/app/oozie
export PATH=$OOZIE_HOME/bin:$PATH
3.3 修改Hadoop配置(原来学习的基础上添加如下内容)
- core-site.xml
<!-- Oozie Server的Hostname -->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<!-- 允许被Oozie代理的用户组 -->
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
- mapred-site.xml
<!-- 配置 MapReduce JobHistory Server 地址 ,默认端口10020 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>cdh001:10020</value>
</property>
<!-- 配置 MapReduce JobHistory Server web ui 地址, 默认端口19888 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>cdh001:19888</value>
</property>
- yarn-site.xml
<!-- 任务历史服务 -->
<property>
<name>yarn.log.server.url</name>
<value>http://cdh001:19888/jobhistory/logs/</value>
</property>
完成后,scp同步到其他节点
3.4 重启Hadoop集群
在namenode节点上:start-dfs.sh
在resourcemanager节点上:start-yarn.sh
在namenode节点上启动历史服务器:mr-jobhistory-daemon.sh start historyserver
3.5 在oozie根目录下解压hadooplibs
解压hadooplibs
tar -zxvf oozie-hadooplibs-4.1.0-cdh5.7.6.tar.gz
执行完成后,我们需要的hadooplibs(该目录包含很多jar包)目录会自动解压到/opt/app/oozie/oozie-4.1.0-cdh5.7.6目录中,将其复制到oozie根目录
cp -r oozie-4.1.0-cdh5.7.6/* ./
3.6 在Oozie根目录下创建libext目录
mkdir libext
3.7 拷贝一些依赖的Jar包
(1) 将hadooplibs里面的jar包,拷贝到libext目录下:
cp oozie-4.1.0-cdh5.7.6/hadooplibs/hadooplib-2.6.0-cdh5.7.6.oozie-4.1.0-cdh5.7.6/* /opt/app/oozie/libext/
(2) 拷贝Mysql驱动包到libext目录下:
cp /opt/app/hive/lib/mysql-connector-java-5.1.47-bin.jar /opt/app/oozie/libext/
3.8 将ext-2.2.zip拷贝到libext/目录下
- ext是一个js框架,用于展示oozie前端页面.
cp /opt/soft/ext-2.2.zip /opt/app/oozie/libext/
3.9 修改Oozie配置文件
- oozie-site.xml
<configuration>
<!-- 让Oozie引用Hadoop的配置文件 -->
<property>
<name>oozie.service.HadoopAccessorService.hadoop.configurations</name>
<value>*=/opt/app/hadoop/etc/hadoop</value>
</property>
<property>
<name>oozie.service.HadoopAccessorService.action.configurations</name>
<value>*=/opt/app/hadoop/etc/hadoop</value>
</property>
<!-- 开启oozie的自动建表 -->
<property>
<name>oozie.service.JPAService.create.db.schema</name>
<value>true</value>
</property>
<!-- JDBC的驱动 -->
<property>
<name>oozie.service.JPAService.jdbc.driver</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!--oozie所需的数据库地址 -->
<property>
<name>oozie.service.JPAService.jdbc.url</name>
<value>jdbc:mysql://cdh002:3306/oozie?createDatabaseIfNotExist=true</value>
</property>
<!-- 数据库用户名 -->
<property>
<name>oozie.service.JPAService.jdbc.username</name>
<value>root</value>
</property>
<!-- 数据库密码 -->
<property>
<name>oozie.service.JPAService.jdbc.password</name>
<value>123456</value>
</property>
<property>
<name>oozie.processing.timezone</name>
<value>GMT+0800</value>
</property>
</configuration>
3.10 初始化Oozie
(1) 上传Oozie目录下的yarn.tar.gz文件到HDFS:
尖叫提示:yarn.tar.gz文件会自行解压
oozie-setup.sh sharelib create -fs hdfs://cdh001:9000 -locallib oozie-sharelib-4.1.0-cdh5.7.6-yarn.tar.gz
报错:
解决办法:
在msql服务器上给oozie所在节点授权:
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
授予允许其他任何机器(%)使用root用户使用123456这个密码登录到mysql,授予所有数据库的所有表的权限
grant all privileges on *.* to 'root'@'cdh001' identified by '123456' with grant option;
flush privileges; 刷新权限
然后重启hdfs、yarn和jobhstoryserver
问题解决
去网页cdh001:50070检查对应目录有没有文件生成:
(2) 创建oozie.sql文件
oozie-setup.sh db create -run -sqlfile oozie.sql
执行成功后,mysql数据库中会生成一个oozie数据库。
(3) 打包项目,生成war包
yum -y install unzip
yum -y install zip
- 解压ext-zip
unzip libext/ext-2.2.zip
- 打包
oozie-setup.sh prepare-war
3.11 启动/关闭oozie
1. 启动前台/后台
oozied.sh run/start
2. 关闭
oozied.sh stop
3.12 访问Oozie的Web页面
http://cdh001:11000/oozie/
看到这个页面,恭喜Oozie配置成功!