Oozie介绍

1. Hadoop常见调度框架:

(1)Linux Crontab:
Linux自带的任务调度计划,在任务比较少的情况下,可以使用这种方式,直接执行脚本,例如添加一个执行计划: 0 12 * hive -f xxx.sql
(2)Azkaban:
(3)Oozie:Cloudera公司开源
(4)Zeus:阿里开源。

Oozie是管理Hadoop作业的工作流调度系统。Oozie定义了控制流节点和动作节点。Oozie实现的功能:
(1)Workflow:顺序执行流程节点;
(2)Coordinator:定时触发workflow;
(3)Bundle Job:绑定多个Coordinator。
Work Flow流程图:

work flow.png

Coordinator生命周期:

coordinator.png

Bundle:

Bundle.png

2. Oozie安装:

Oozie不需要设置OOZIE_HOME环境变量(系统自行计算),推荐使用单独的用户(而不是root)来安装Oozie。

1.编译源码,解压压缩包:

官方文档

如果需要对Oozie个性化修改,可以自行修改源代码并编译,这里我直接使用官网编译好的版本oozie-4.0.0-cdh5.3.6.tar.gz:

$ tar zxf oozie-4.0.0-cdh5.3.6.tar.gz -C /opt/modules/

以下配置添加到core-site.xml文件(使用用户和hostname替换文档中内容):
$HADOOP_HOME/etc/hadoop/core-site.xml:

<!-- OOZIE -->
<property>
    <name>hadoop.proxyuser.natty.hosts</name>
    <value>hadoop-senior01.pmpa.com</value>
</property>
<property>
    <name>hadoop.proxyuser.natty.groups</name>
    <value>*</value>
</property>

修改oozie配置文件,$OOZIE_HOME/conf/oozie-site.xml:

<property>
    <name>oozie.service.HadoopAccessorService.hadoop.configurations</name>
    <value>*=/opt/modules/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二进制发行包的目录,解压hadooplibs发行包,也就是oozie-hadooplibs-4.0.0-cdh5.3.6.tar.gz

$ tar zxf oozie-hadooplibs-4.0.0-cdh5.3.6.tar.gz -C /opt/modules/

这样,oozie的安装目录多了一个hadooplibs目录。

2.详细配置:

启动应该使用oozied.sh脚本,并添加,start、stop、run等参数。
在oozie的解压目录下创建libext目录。并将hadooplibs下的jar包拷贝到这个目录里,需要注意的是hadooplibs目录下有个文件夹hadooplib-2.5.0-cdh5.3.6.oozie-4.0.0-cdh5.3.6,hadooplib-2.5.0-mr1-cdh5.3.6.oozie-4.0.0-cdh5.3.6;后者对应于mapreduce1,所以我们拷贝第一个文件夹下的jar包即可。
拷贝extjs的压缩包到libext目录。

$ mkdir libext
$ cp hadooplibs/hadooplib-2.5.0-cdh5.3.6.oozie-4.0.0-cdh5.3.6/* libext/
$ cp ext-2.2.zip /opt/modules/oozie-4.0.0-cdh5.3.6/libext/

安装mysql数据库,并生成相关表(oozie是一个web系统,需要自己的知识库),所以,我们需要mysql connector驱动包,拷贝到$oozie_home/libext下。

$ cp mysql-connector-java-5.1.27-bin.jar /opt/modules/oozie-4.0.0-cdh5.3.6/libext/

(1)生成mysql数据表(oozie所需要的)。
我们可以使用 bin/oozie-setup.sh命令的“db create”参数,来操作mysql数据库创建相应的库和表。但在使用这个命令前,需要先给oozie关联上mysql。下面先做关联操作:
修改oozie的配置文件($oozie_home/conf/oozie-site.xml),配置driver、url、username、password:

    <!-- Oozie Related Mysql -->
    <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://hadoop-senior01.pmpa.com: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>

(2)关联好mysql之后,通过脚本创建mysql的库表:

$ bin/oozie-setup.sh db create -run oozie.sql

执行成功之后,登陆到mysql验证数据库表的创建情况:

mysql> show tables;
+------------------------+
| Tables_in_oozie        |
+------------------------+
| BUNDLE_ACTIONS         |
| BUNDLE_JOBS            |
| COORD_ACTIONS          |
| COORD_JOBS             |
| OOZIE_SYS              |
| OPENJPA_SEQUENCE_TABLE |
| SLA_EVENTS             |
| SLA_REGISTRATION       |
| SLA_SUMMARY            |
| VALIDATE_CONN          |
| WF_ACTIONS             |
| WF_JOBS                |
+------------------------+
12 rows in set (0.00 sec)

(3)下面生成war包,供tomcat访问:

$ bin/oozie-setup.sh prepare-war

命令执行成功后,会提示war包已经生成在webapps目录下:New Oozie WAR file with added ‘ExtJS library, JARs‘ at /opt/modules/oozie-4.0.0-cdh5.3.6/oozie-server/webapps/oozie.war
(4)上传sharelib压缩包到HDFS上:
在$oozie_home下,有2个sharelib压缩包,分别是oozie-sharelib-4.0.0-cdh5.3.6.tar.gz 和 oozie-sharelib-4.0.0-cdh5.3.6-yarn.tar.gz,很明显,我们必须拷贝第二个带yarn的压缩包(前边的是1.0版本的,不带yarn的)。

$ bin/oozie-setup.sh sharelib create -fs hdfs://hadoop-senior01.pmpa.com:8020 -locallib oozie-sharelib-4.0.0-cdh5.3.6-yarn.tar.gz

3.启动oozie和测试:

启动oozie,使用oozied.sh脚本。

$ bin/oozied.sh start

启动后,访问网址http://hadoop-senior01.pmpa.com:11000/oozie/
可以看到oozie的主页面:

oozie的主页面.png

3. Oozie测试和使用:

1.执行官方example实例:

Oozie官方提供了一个样例包,我们后边的开发都以这个example实例为模板进行。解压Oozie主目录下的example包:

$ tar zxf oozie-examples.tar.gz
$ cd examples/apps

apps目录下存放了我们需要配置的作业内容。

apps目录内容.png

在目录中可以看到,有关于map-reduce、sqoop、hive等很多类型的作业的配置的实例。下面,我以map-reduce作业为例来说明,oozie作业的配置方法。在map-reduce目录中有三个重要的内容:
(1)job.properties:定义job相关的属性,比如输入输出目录、namenode节点等。定义了workflow.xml文件的位置。
(2)workflow.xml:定义工作流相关的配置,start 、 end 、kill等
(3)lib文件夹:存放job任务需要的jar包。
注意:配置作业需要修改job.properties和workflow.xml两个文件。
配置job.properties:

nameNode=hdfs://hadoop-senior01.pmpa.com:8020
jobTracker=hadoop-senior02.pmpa.com:8032
queueName=default
examplesRoot=examples
user.name=natty

oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/apps/map-reduce/workflow.xml
outputDir=map-reduce

jobTracker配置的是ResourceManager的端口。需要一定注意,我们的ResourceManager配置在senior02主机上,并且端口是8032(不是8088,8088端口是web界面查看的端口)
配置workflow.xml:

<workflow-app xmlns="uri:oozie:workflow:0.2" name="map-reduce-wf">
    <start to="mr-node"/>
    <action name="mr-node">
        <map-reduce>
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <prepare>
                <delete path="${nameNode}/user/natty/${examplesRoot}/output-data/${outputDir}"/>
            </prepare>
            <configuration>
                <property>
                    <name>mapred.job.queue.name</name>
                    <value>${queueName}</value>
                </property>
                <property>
                    <name>mapred.mapper.class</name>
                    <value>org.apache.oozie.example.SampleMapper</value>
                </property>
                <property>
                    <name>mapred.reducer.class</name>
                    <value>org.apache.oozie.example.SampleReducer</value>
                </property>
                <property>
                    <name>mapred.map.tasks</name>
                    <value>1</value>
                </property>
                <property>
                    <name>mapred.input.dir</name>
                    <value>/user/natty/${examplesRoot}/input-data/text</value>
                </property>
                <property>
                    <name>mapred.output.dir</name>
                    <value>/user/natty/${examplesRoot}/output-data/${outputDir}</value>
                </property>
            </configuration>
        </map-reduce>
        <ok to="end"/>
        <error to="fail"/>
    </action>
    <kill name="fail">
        <message>Map/Reduce failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>
    <end name="end"/>
</workflow-app>

上传examples目录到 HDFS的/user/natty/路径。

$ /opt/modules/hadoop-2.5.0-cdh5.3.6/bin/hdfs dfs -put examples/ /user/natty/

运行example应用:

$ bin/oozie job -oozie http://hadoop-senior01.pmpa.com:11000/oozie -config examples/apps/map-reduce/job.properties -run

杀掉job:

$ bin/oozie job -oozie http://hadoop-senior01.pmpa.com:11000/oozie -kill 0000000-170423000216782-oozie-natt-W

请注意,在执行应用前,要保证oozie是启动状态的。

时间: 2024-08-26 00:43:10

Oozie介绍的相关文章

Hadoop生态圈介绍

[问]hadoop在生产环境下综合考虑的的数据块副本数多少 [答]默认3个,一般也是用3个副本的比较多,如果有特殊需求的话,可以根据自己需求添加副本数. 1. hadoop 生态概况 Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储. 具有可靠.高效.可伸缩的特点. Hadoop的核心是YARN,HDFS和Mapreduce 下图是hadoop生态系统,集成spark生态圈.在未来一段

舆情,文本挖掘

MLE,MAP,EM 和 point estimation 之间的关系是怎样的 和点估计相对应的是区间估计,这个一般入门的统计教材里都会讲.直观说,点估计一般就是要找概率密度曲线上值最大的那个点,区间估计则要寻找该曲线上满足某种条件的一个曲线段. 最大似然和最大后验是最常用的两种点估计方法.以最简单的扔硬币游戏为例,一枚硬币扔了五次,有一次是正面.用最大似然估计,就是以这五次结果为依据,判断这枚硬币每次落地时正面朝上的概率(期望值)是多少时,最有可能得到四次反面一次正面的结果.不难计算得到期望概

大数据经典学习路线(及供参考)

http://blog.csdn.net/yuexianchang/article/details/52468291 1.Linux基础和分布式集群技术 学完此阶段可掌握的核心能力: 熟练使用linux,熟练安装Linux上的软件,了解熟悉负载均衡.高可靠等集群相关概念,搭建互联网高并发.高可靠的服务架构: 学完此阶段可解决的现实问题: 搭建负载均衡.高可靠的服务器集群,可以增大网站的并发访问量,保证服务不间断地对外服务: 学完此阶段可拥有的市场价值: 具备初级程序员必要具备的Linux服务器运

超人学院第九期大数据高薪就业班招生了

超人学院第九期 大数据高薪就业班招生了 超人学院第九期大数据高薪就业班开始招生了,课程加量不加价,还设有奖学金.亲,还等什么呢,赶快来报名吧!! 我们来看看课程具体内容 课程主题 课程内容 Linux课程 Linux命令.shell编程.软件管理 Hadoop2课程 搭建伪分布式实验环境 介绍HDFS体系结构及shell.Java操作方式 介绍mapreduce体系结构及各种算法 zookeeper zookeeper介绍及集群搭建 使用命令及Java操作zookeeper hbase hbas

Oozie框架介绍

Oozie框架: 1.Oozie英文翻译:驯象人 2.Oozie简介 一个基于工作流引擎的开源框架,由Cloudera公司贡献给Apache,提供对Hadoop Mapreduce.Pig Jobs的任务调度与协调. Oozie需要部署到Java Servlet容器中运行. 3.Oozie在集群中扮演的角色 定时调度任务,多任务可以按照执行的逻辑顺序调度. 4.Oozie的功能模块 Workflow:顺序执行流程节点,支持fork(分支多个节点),join(合并多个节点为一个) Coordina

大数据入门:各种大数据技术介绍

转自:http://www.aboutyun.com/thread-7569-1-1.html 大数据我们都知道hadoop,可是还会各种各样的技术进入我们的视野:Spark,Storm,impala,让我们都反映不过来.为了能够更好的架构大数据项目,这里整理一下,供技术人员,项目经理,架构师选择合适的技术,了解大数据各种技术之间的关系,选择合适的语言.我们可以带着下面问题来阅读本文章:1.hadoop都包含什么技术2.Cloudera公司与hadoop的关系是什么,都有什么产品,产品有什么特性

一个简单的使用Quartz和Oozie调度作业给大数据计算平台执行

一,介绍 Oozie是一个基于Hadoop的工作流调度器,它可以通过Oozie Client 以编程的形式提交不同类型的作业,如MapReduce作业和Spark作业给底层的计算平台(如 Cloudera Hadoop)执行. Quartz是一个开源的调度软件,它为任务的调度执行提供了各种触发器以及监听器 下面使用Quartz + Oozie 将一个MapReduce程序提交给Cloudera Hadoop执行 二,调度思路 ①为什么要用Quartz呢?主要是借助Quartz强大的触发器功能.它

在HDInsight中的Hadoop介绍

在HDInsight中的Hadoop介绍 概览 Azure的HDInsight是,部署和规定的Apache?Hadoop?集群在云中,提供用于管理,分析和大数据报告软件框架中的服务. 大数据 数据被描写叙述为"大数据",以表明它被收集在以往升级卷,以越来越高的速度,并为一个扩大各种非结构化格式和可变语义语境.大数据的收集并不正确企业自身提供的价值. 对于大数据在可操作智能或洞察力的形式提供价值.不仅要正确的问题问及相关的问题,数据收集,数据必须能够訪问.清洗.分析,然后在一个实用的方式

工作流引擎Oozie(一):workflow

1. Oozie简介 Yahoo开发工作流引擎Oozie(驭象者),用于管理Hadoop任务(支持MapReduce.Spark.Pig.Hive),把这些任务以DAG(有向无环图)方式串接起来.Oozie任务流包括:coordinator.workflow:workflow描述任务执行顺序的DAG,而coordinator则用于定时任务触发,相当于workflow的定时管理器,其触发条件包括两类: 数据文件生成 时间条件 Oozie定义了一种基于XML的hPDL (Hadoop Process