1. Oozie概述
一个基于工作流引擎的开源框架,由Cloudera公司贡献给Apache,提供对Hadoop Mapreduce、Pig Jobs,shell 的任务调度与协调。Oozie需要部署到Java Servlet容器中运行(需要打成war包去运行)。
主要用于定时调度任务,多任务可以按照执行的逻辑顺序调度。
类似oozie的框架有azkaban,zeux等
2. Oozie的功能模块
oozie的功能每个模块对应的是一个配置文件,配置文件里面配置相关信息
2.1 Workflow
顺序执行流程节点,支持fork(分支多个节点),join(合并多个节点为一个) 对应配置文件为Workflow.xml
2.2 Coordinator
定时触发workflow
2.3 Bundle Job(一般不用)
绑定多个Coordinator
3. oozie节点
oozie节点就是各个配置文件中使用的的节点
3.1 控制流节点(Control Flow Nodes)
控制流节点一般都是定义在工作流开始或者结束的位置,比如start,end,kill等。以及提供工作流的执行路径机制,如decision,fork,join等。
3.2 动作节点(Action Nodes)
负责执行具体动作的节点,比如:拷贝文件,执行某个Shell脚本等等
4. oozie的部署
这里配置的是cdh版本的,所以前提是安装cdh 的hadoop
需要已下资料:
hadoop cdh版本
ext 一个js框架
mysql 的jar包,因为oozie原数据也是放在mysql 中,需要配置mysql相关
oozie的安装包
有需要资料的留言
4.1 首先配置hadoop集群
core-site.xml 这里因为oozie需要调度mr任务需要和hadoop 交互,这里设置访问用户用户组
<!-- Oozie Server的Hostname -->
<property>
<name>hadoop.proxyuser.admin.hosts</name>
<value>*</value>
</property>
<!-- 允许被Oozie代理的用户组 -->
<property>
<name>hadoop.proxyuser.admin.groups</name>
<value>*</value>
</property>
mapred-site.xml oozie执行mr 这里需要看执行日志,需要配置jobHistoryServer 它一般和namenode在同一个节点上
<!-- 配置 MapReduce JobHistory Server 地址 ,默认端口10020 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop-101:10020</value>
</property>
<!-- 配置 MapReduce JobHistory Server web ui 地址, 默认端口19888 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop101:19888</value>
</property>
yarn-site.xml
<!-- 任务历史服务 一般和nn同意同一个节点 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop-101:19888/jobhistory/logs/</value>
</property>
完成后:记得scp同步到其他机器节点,
测试jobHistoryServer是否可用,执行一个hadoop自带的jar
/opt/module/cdh/hadoop-2.5.0-cdh5.3.6/bin/yarn jar ./hadoop-mapreduce-examples-2.7.2.jar wordcount /input/ /out/
查看hadoop-102:8088(resourceManager 节点)上看到yarn job 执行流程就成功了
4.2 部署Oozie
- 解压Oozie
[admin@hadoop102 software]$ tar -zxvf /opt/software/cdh/oozie-4.0.0-cdh5.3.6.tar.gz -C /opt/module/cdh
- 在oozie根目录下解压oozie-hadooplibs-4.0.0-cdh5.3.6.tar.gz
[admin@hadoop102 oozie-4.0.0-cdh5.3.6]$ tar -zxvf oozie-hadooplibs-4.0.0-cdh5.3.6.tar.gz -C ../
完成后Oozie目录下会出现hadooplibs目录
3) 在Oozie目录下创建libext目录,这个目录放相关依赖
[admin@hadoop102 oozie-4.0.0-cdh5.3.6]$ mkdir libext/
将hadooplibs里面的jar包,拷贝到libext目录下:
拷贝Mysql驱动包到libext目录下:
将ext-2.2.zip拷贝到libext/目录下:
[admin@hadoop102 oozie-4.0.0-cdh5.3.6]$ cp -ra hadooplibs/hadooplib-2.5.0-cdh5.3.6.oozie-4.0.0-cdh5.3.6/* libext/
[admin@hadoop102 oozie-4.0.0-cdh5.3.6]$ cp -a /opt/software/mysql-connector-java-5.1.27/mysql-connector-java-5.1.27-bin.jar ./libext/
[admin@hadoop102 oozie-4.0.0-cdh5.3.6]$ cp -a /opt/software/cdh/ext-2.2.zip libext/
- 配制Oozie配置文件
vi conf/oozie-site.xml
配制mysql 四要素 & hadoop 的配置文件位置
<property>
<name>oozie.service.JPAService.jdbc.driver</name>
<value>com.mysql.jdbc.Driver</value>
<description>
JDBC driver class.
</description>
</property>
<property>
<name>oozie.service.JPAService.jdbc.url</name>
<value>jdbc:mysql://hadoop-101:3306/oozie</value>
<description>
JDBC URL.
</description>
</property>
<property>
<name>oozie.service.JPAService.jdbc.username</name>
<value>root</value>
<description>
DB user name.
</description>
</property>
<property>
<name>oozie.service.JPAService.jdbc.password</name>
<value>root</value>
<description>
DB user password.
IMPORTANT: if password is emtpy leave a 1 space string, the service trims the value,
if empty Configuration assumes it is NULL.
</description>
</property>
<property>
<name>oozie.service.HadoopAccessorService.hadoop.configurations</name>
<value>*=/opt/module/cdh/hadoop-2.5.0-cdh5.3.6/etc/hadoop</value>
<description>
Comma separated AUTHORITY=HADOOP_CONF_DIR, where AUTHORITY is the HOST:PORT of
the Hadoop service (JobTracker, HDFS). The wildcard '*' configuration is
used when there is no exact match for an authority. The HADOOP_CONF_DIR contains
the relevant Hadoop *-site.xml files. If the path is relative is looked within
the Oozie configuration directory; though the path can be absolute (i.e. to point
to Hadoop client conf/ directories in the local filesystem.
</description>
</property>
总结为如下:
属性:oozie.service.JPAService.jdbc.driver
属性值:com.mysql.jdbc.Driver
解释:JDBC的驱动
属性:oozie.service.JPAService.jdbc.url
属性值:jdbc:mysql://hadoop102:3306/oozie
解释:oozie所需的数据库地址
属性:oozie.service.JPAService.jdbc.username
属性值:root
解释:数据库用户名
属性:oozie.service.JPAService.jdbc.password
属性值:000000
解释:数据库密码
属性:oozie.service.HadoopAccessorService.hadoop.configurations
属性值:*=/opt/module/CDH/hadoop-2.5.0-cdh5.3.6/etc/hadoop
解释:让Oozie引用Hadoop的配置文件
这里需要在mysql 创建oozie 数据库
mysql> create database oozie;
- 初始化Oozie
上传 oozie-sharelib-4.0.0-cdh5.3.6-yarn.tar.gz到hdfs并解压
[admin@hadoop-102 oozie-4.0.0-cdh5.3.6]$ bin/oozie-setup.sh sharelib create -fs hdfs://hadoop-101:8020 -locallib oozie-sharelib-4.0.0-cdh5.3.6-yarn.tar.gz
这条目录自动解压
去50070检查对应目录有没有文件生成。
6) 创建oozie.sql文件
[admin@hadoop102 oozie-4.0.0-cdh5.3.6]$ bin/ooziedb.sh create -sqlfile oozie.sql -run
打包项目,生成war包(这里oozie服务确认是不启动的)
[admin@hadoop102 oozie-4.0.0-cdh5.3.6]$ bin/oozie-setup.sh prepare-war
- 启动关闭oozie
[admin@hadoop102 oozie-4.0.0-cdh5.3.6]$ bin/oozied.sh start
[admin@hadoop102 oozie-4.0.0-cdh5.3.6]$ bin/oozied.sh stop
- 启动之后访问Oozie的Web页面,端口11000
http://hadoop-101:11000/oozie
如果有出现问题评论直接提问
5. oozie的第一个案例
案例内容:使用Oozie调度Shell脚本
第一步:创建app目录 oozie-app/shell 以后所有job都放在oozie-app的分目录下
[root@hadoop-102 oozie-4.0.0-cdh5.3.6]# mkdir oozie-app
第二步:在oozie-app/shell目录下创建两个文件——job.properties和workflow.xml文件
[root@hadoop-102 oozie-4.0.0-cdh5.3.6]# touch touch workflow.xml
[root@hadoop-102 oozie-4.0.0-cdh5.3.6]# touch job.properties