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是启动状态的。

参考:

 
关于oozie的FAQ参考网址:https://github.com/yahoo/oozie/wiki/FAQ
 
 

Oozie介绍的更多相关文章

  1. hadoop生态圈介绍

    原文地址:大数据技术Hadoop入门理论系列之一----hadoop生态圈介绍   1. hadoop 生态概况 Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户可以在不了解分 ...

  2. Oozie 快速入门

    设想一下,当你的系统引入了spark或者hadoop以后,基于Spark和Hadoop已经做了一些任务,比如一连串的Map Reduce任务,但是他们之间彼此右前后依赖的顺序,因此你必须要等一个任务执 ...

  3. 大数据技术Hadoop入门理论系列之一----hadoop生态圈介绍

    Technorati 标记: hadoop,生态圈,ecosystem,yarn,spark,入门 1. hadoop 生态概况 Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用 ...

  4. kettle、Oozie、camus、gobblin

    kettle简介 http://www.cnblogs.com/limengqiang/archive/2013/01/16/KettleApply1.html Oozie介绍 http://blog ...

  5. Oozie任务调度框架详解及使用简介(一)

    摘要:个人最近一段时间一直在使用oozie,从刚开始的各种别扭到现在越来越觉得有意思的情况下,想整理一下关于oozie的认知,整理出来一个oozie系列,本来市面上关于oozie的资料就比较少,希望写 ...

  6. 【】Hadoop生态圈介绍

    Technorati 标记: hadoop,生态圈,ecosystem,yarn,spark,入门 1. hadoop 生态概况 Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用 ...

  7. 基于Hadoop技术实现的离线电商分析平台(Flume、Hadoop、Hbase、SpringMVC、highcharts)

    离线数据分析平台是一种利用hadoop集群开发工具的一种方式,主要作用是帮助公司对网站的应用有一个比较好的了解.尤其是在电商.旅游.银行.证券.游戏等领域有非常广泛,因为这些领域对数据和用户的特性把握 ...

  8. hadoop学习之旅2

    集群搭建文档1.0版本 1. 集群规划 所有需要用到的软件: 链接:http://pan.baidu.com/s/1jIlAz2Y 密码:kyxl 2.0 系统安装 2.1 主机名配置 vi /etc ...

  9. 大数据技术之_14_Oozie学习_Oozie 的简介+Oozie 的功能模块介绍+Oozie 的部署+Oozie 的使用案列

    第1章 Oozie 的简介第2章 Oozie 的功能模块介绍2.1 模块2.2 常用节点第3章 Oozie 的部署3.1 部署 Hadoop(CDH版本的)3.1.1 解压缩 CDH 版本的 hado ...

随机推荐

  1. codevs 3083 二叉树

    题目描述 Description 同学们都知道二叉树的定义,也都知道3个结点的二叉树有5种, 现给你二叉树的结点个数n,要你编程输出不同形态二叉树的种数. 输入描述 Input Description ...

  2. windows下Oracle Tuxedo编译应用前需要配置的相关环境变量

    rem (c) BEA Systems, Inc. All Rights Reserved. rem Copyright (c) BEA Systems, Inc. rem All Rights Re ...

  3. Linux下的二进制兼容性的检测

    都知道Linux的二进制兼容与windows相比简直是天差地别,windows的二进制兼容做得特别好,很老的游戏都能在windows 10上跑,写的好的程序,在XP上也不是不可以.但是Linux就不一 ...

  4. Git: fatal: Pathspec is in submodule

    出现是问题: git提交代码是出现fatal: Path 'directory/file' is in submodule 'directory''错误 Removing the directory ...

  5. Ubuntu系统下添加程序启动器

    Ubuntu系统上安装的软件,有的会自动创建快捷方式,在程序中可以搜索到,而有的安装后不会在应用程序中出现,如Eclipse.Spring Tool Suite或是绿色软件等,那么怎么手动创建快捷方式 ...

  6. hihocoder第229周:最大连续字母个数

    题目链接 给定一个仅包含小写字母的字符串s(长度小于1e5),你可以交换任意两个字符的位置,现在允许交换k次,要求交换之后,s中最长的连续相同字符个数尽量多,求这个最长连续区间的长度. 样例 输入 1 ...

  7. select收数据

    之前写的服务器端 表示都无法收到client发的数据,找不到原因,原来是有个socket接收数据缓冲木有设置,现在设置后就可以正常收到数据啦! server端: #include <winsoc ...

  8. DHCP工作过程的六个主要步骤

    对于学习DHCP来说,很重要的一部分就是对于DHCP工作过程的理解. DHCP分为两个部分:一个是服务器端,另一个是客户端. 所有客户机的IP地址设定资料都由DHCP服务器集中管理,并负责处理客户端的 ...

  9. 超酷的 Vim 搜索技巧

    尽管目前我们已经涉及 Vim 的多种特性,但此编辑器的特性集如此庞大,不管我们学习多少,似乎仍然远远不足.承接我们的 Vim 教程系列,本文我们将讨论 Vim 提供的多种搜索技术. 不过在此之前,请注 ...

  10. HDU 1023 Train Problem II (大数卡特兰数)

    Train Problem II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...