hadoop之oozie配置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014439581/article/details/51371514

说明

Hadoop中执行的任务有时候需要把多个Map/Reduce作业连接到一起,这样才能够达到目的。在Hadoop生态圈中,Oozie它让我们可以把多个Map/Reduce作业组合到一个逻辑工作单元中,从而完成更大型的任务。

原理

Oozie是一种Java Web应用程序,它运行在Java servlet容器——即Tomcat——中,并使用数据库来存储以下内容:

工作流定义

当前运行的工作流实例,包括实例的状态和变量

Oozie工作流是放置在控制依赖DAG(有向无环图 Direct Acyclic Graph)中的一组动作(例如,HadoopMap/Reduce作业、Pig作业等),其中指定了动作执行的顺序。我们会使用hPDL(一种XML流程定义语言)来描述这个图。

 

hPDL是一种很简洁的语言,只会使用少数流程控制和动作节点。控制节点会定义执行的流程,并包含工作流的起点和终点(startendfail节点)以及控制工作流执行路径的机制(decisionforkjoin节点)。动作节点是一些机制,通过它们工作流会触发执行计算或者处理任务。Oozie为以下类型的动作提供支持: Hadoop map-reduceHadoop文件系统、PigJavaOozie的子工作流(SSH动作已经从Oozie schema 0.2之后的版本中移除了)。

 

所有由动作节点触发的计算和处理任务都不在Oozie之中——它们是由HadoopMap/Reduce框架执行的。这种方法让Oozie可以支持现存的Hadoop用于负载平衡、灾难恢复的机制。这些任务主要是异步执行的(只有文件系统动作例外,它是同步处理的)。这意味着对于大多数工作流动作触发的计算或处理任务的类型来说,在工作流操作转换到工作流的下一个节点之前都需要等待,直到计算或处理任务结束了之后才能够继续。Oozie可以通过两种不同的方式来检测计算或处理任务是否完成,也就是回调和轮询。当Oozie启动了计算或处理任务的时候,它会为任务提供唯一的回调URL,然后任务会在完成的时候发送通知给特定的URL。在任务无法触发回调URL的情况下(可能是因为任何原因,比方说网络闪断),或者当任务的类型无法在完成时触发回调URL的时候,Oozie有一种机制,可以对计算或处理任务进行轮询,从而保证能够完成任务。

 

Oozie工作流可以参数化(在工作流定义中使用像${inputDir}之类的变量)。在提交工作流操作的时候,我们必须提供参数值。如果经过合适地参数化(比方说,使用不同的输出目录),那么多个同样的工作流操作可以并发。

 

一些工作流是根据需要触发的,但是大多数情况下,我们有必要基于一定的时间段和(或)数据可用性和(或)外部事件来运行它们。Oozie协调系统(Coordinator system)让用户可以基于这些参数来定义工作流执行计划。Oozie协调程序让我们可以以谓词的方式对工作流执行触发器进行建模,那可以指向数据、事件和(或)外部事件。工作流作业会在谓词得到满足的时候启动。

 

经常我们还需要连接定时运行、但时间间隔不同的工作流操作。多个随后运行的工作流的输出会成为下一个工作流的输入。把这些工作流连接在一起,会让系统把它作为数据应用的管道来引用。Oozie协调程序支持创建这样的数据应用管道

安装

安装环境 Hadoop2.6.0  maven3.3.9  pig0.15.0  jdk1.8  mysql

1、 解压到app目录下tar -zxf oozie-4.2.0 -C app/

编译mvn clean package assembly:single -p Hadoop-2 -DskipTests

2、 解压编译文件tar -zxf oozie-4.2.0-distro.tar.gz ~/app/oozie/

3、 修改hdfs配置  

修改hadoop 下的core-site.xml

<property>  

    <name>hadoop.proxyuser.[USER].hosts</name>  

    <value>*</value>  

  </property>  

  <property>  

    <name>hadoop.proxyuser.[USER].groups</name>  

    <value>*</value>  

  </property>

[USER]需要改为后面启动oozie tomcat的用户

不重启hadoop集群,而使配置生效

hdfs dfsadmin -refreshSuperUserGroupsConfiguration  

  yarn rmadmin -refreshSuperUserGroupsConfiguration

4、 配置oozie

A、 在oozie-4.2.0目录下新建libext目录,并把ext-2.2.zip 拷贝到该目录下;并拷贝hadoop相关jar包到该目录下 包括jdbcjar

cp $HADOOP_HOME/share/hadoop/*/*.jar libext/

cp $HADOOP_HOME/share/hadoop/*/lib/*.jar libext/

hadooptomcat冲突jar包去掉

mv servlet-api-2.5.jar servlet-api-2.5.jar.bak

mv jsp-api-2.1.jar jsp-api-2.1.jar.bak

mv jasper-compiler-5.5.23.jar jasper-compiler-5.5.23.jar.bak

mv jasper-runtime-5.5.23.jar jasper-runtime-5.5.23.jar.bak

B、 配置数据库连接,文件是conf/oozie-site.xml

<property>  

    <name>oozie.service.JPAService.create.db.schema</name>  

    <value>true</value>  

</property>  

<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://node4: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>root</value>  

</property>  

<property>  

    <name>oozie.service.HadoopAccessorService.hadoop.configurations</name>  

    <value>*=/usr/hadoop/hadoop-2.6.0/etc/hadoop</value>  

</property>

C、启动前的初始化

a. war包  

bin/oozie-setup.sh prepare -war

b. 初始化数据库

bin/ooziedb.sh create -sqlfile oozie.sql -run

c. 修改oozie-4.2.0/oozie-server/conf/server.xml文件,注释掉下面的记录

<!--<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />-->

d. 上传jar

bin/oozie-setup.sh sharelib create -fs hdfs://master:9000

5、 启动

bin/oozied.sh start

案例

MR任务流程

1、 

A、 解压oozie-examples.tar.gz 到oozie-4.2.0下

B、 Vim examples/apps/map-reduce/job.properties

nameNode=hdfs://master:9000

jobTracker=master:8032

queueName=default

examplesRoot=examples

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

outputDir=map-reduce

 

C、 修改Vim examples/apps/map-reduce/workflow.xml

<property>

     <name>mapred.map.tasks</name>

     <value>2</value>

   </property>

D、提交任务

oozie job -oozie http://master:11000/oozie -config examples/apps/map-reduce/job.properties -run

E、 查看

http://master:11000/oozie/

http://master:8088/cluster

 

2

展开阅读全文

没有更多推荐了,返回首页