分享

新技术:Oozie-3.3.2安装配置运行实践

本帖最后由 xioaxu790 于 2014-5-14 17:05 编辑
问题导读:
1、部署Oozie,需要哪些组件 ?





Oozie是一个开源的工作流调度系统,它能够管理逻辑复杂的多个Hadoop作业,按照指定的顺序将其协同运行起来。例如,我们可能有这样一个需求,某个业务系统每天产生20G原始数据,我们每天都要对其进行处理,处理步骤如下所示:

  • 通过Hadoop先将原始数据同步到HDFS上;
  • 借助MapReduce计算框架对原始数据进行转换,生成的数据以分区表的形式存储到多张Hive表中;
  • 需要对Hive中多个表的数据进行JOIN处理,得到一个明细数据Hive大表;
  • 将明细数据进行复杂的统计分析,得到排序后的报表信息;
  • 需要将统计分析得到的结果数据同步到业务系统中,供业务调用使用。


上述过程可以通过工作流系统来编排任务,最终生成一个工作流实例,然后每天定时启动运行这个实例即可。在这种依赖于Hadoop存储和处理能力要求的应用场景下,Oozie可能能够简化任务调度和执行。
这里,我们在CentOS 6.2系统下安装Oozie-3.3.2,需要安装相关的依赖软件包,下面我们一步一步地进行安装,包括安装配置依赖软件包。这里,我们使用MySQL数据库存储Oozie数据,Hadoop使用的是1.2.1版本。


安装Oozie Server

Oozie Server可以为我们提供很多管理Job的便捷功能,比如,通过可视化界面去管理Job的运行状态,同时也支持我构建含有多个复杂Hadoop Job流程,各个Job之间的依赖关系完全可以通过一个工作流配置文件组装起来,然后由Oozie Server其管理执行。


安装Maven构建工具

下载安装,执行如下命令:


  1. <font color="rgb(64, 64, 64)"><font face="Ubuntu">wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.2.1/binaries/apache-maven-3.2.1-bin.tar.gz
  2. tar xvzf apache-maven-3.2.1-bin.tar.gz
  3. </font></font>
复制代码

加入环境变量,使变量配置生效:


  1. <font color="rgb(64, 64, 64)"><font face="Ubuntu">export MAVEN_HOME=/home/shirdrn/cloud/programs/apache-maven-3.2.1
  2. export PATH=$PATH:$MAVEN_HOME/bin
  3. </font></font>
复制代码

安装MySQL数据库
安装MySQL数据库,执行如下命令:
  1. sudo rpm -e --nodeps mysql
  2. yum list | grep mysql
  3. sudo yum install -y mysql-server mysql mysql-deve
复制代码

为root用户设置密码:
  1. mysqladmin -u root password '8YOhyo988_Kjo0'
复制代码

然后可以使用root账号登录MySQL数据库,进行管理:
  1. mysql -u root -p
复制代码

输入密码登录成功。

安装配置Tomcat
下载安装Tomcat Web服务器:
  1. wget http://apache.dataguru.cn/tomcat/tomcat-7/v7.0.52/bin/apache-tomcat-7.0.52.tar.gz
  2. tar xvzf apache-tomcat-7.0.52.tar.gz
复制代码

设置环境变量:
  1. export CATALINA_HOME=/home/shirdrn/cloud/programs/apache-tomcat-7.0.52
  2. export PATH=$PATH:$CATALINA_HOME/bin
复制代码


如果使用MySQL存储Oozie数据,需要将MySQL的驱动程序拷贝到Tomcat安装目录下,亦即$CATALINA_HOME/lib下面。

准备ExtJS工具包

下载ExtJS压缩包:
  1. wget http://extjs.com/deploy/ext-2.2.zip
复制代码



安装Oozie

下载安装,执行如下命令:


  1. <font color="rgb(64, 64, 64)"><font face="Ubuntu">wget http://mirror.bit.edu.cn/apache/oozie/3.3.2/oozie-3.3.2.tar.gz
  2. tar xvzf oozie-3.3.2.tar.gz
  3. cd oozie-3.3.2
  4. bin/mkdistro.sh -DskipTests
  5. </font></font>
复制代码

构建成后,可以在oozie-3.3.2/distro/target目录下看到构建后的文件,例如我的路径是/home/shirdrn/cloud/programs/oozie-3.3.2/distro/target/oozie-3.3.2-distro/oozie-3.3.2,内容如下所示:


  1. <font color="rgb(64, 64, 64)"><font face="Ubuntu">[shirdrn@oozie-server oozie-3.3.2]$ pwd
  2. /home/shirdrn/cloud/programs/oozie-3.3.2/distro/target/oozie-3.3.2-distro/oozie-3.3.2
  3. [shirdrn@oozie-server oozie-3.3.2]$ ls
  4. bin       lib                        oozie-core             oozie-sharelib-3.3.2.tar.gz
  5. conf      libtools                   oozie-examples.tar.gz  oozie.war
  6. docs.zip  oozie-client-3.3.2.tar.gz  oozie-server           release-log.txt
  7. </font></font>
复制代码

将OOZIE_HOME变量指向该目录,修改~/bashrc文件:


  1. <font color="rgb(64, 64, 64)"><font face="Ubuntu">export OOZIE_HOME=/home/shirdrn/cloud/programs/oozie-3.3.2/distro/target/oozie-3.3.2-distro/oozie-3.3.2
  2. export PATH=$PATH:$OOZIE_HOME/bin
  3. </font></font>
复制代码

将ExtJS工具包拷贝到目录$OOZIE_HOME中:


  1. <font color="rgb(64, 64, 64)"><font face="Ubuntu">cp ~/cloud/programs/oozie-3.3.2/ext-2.2.zip $OOZIE_HOME/
  2. </font></font>
复制代码

在上面的目录下创建libext目录,并将hadoop相关的jar库文件拷贝到libext下面,我使用的是Hadoop 1.2.1版本:


  1. <font color="rgb(64, 64, 64)"><font face="Ubuntu">[shirdrn@oozie-server oozie-3.3.2]$ mkdir libext
  2. [shirdrn@oozie-server oozie-3.3.2]$ cp ~/cloud/programs/hadoop-1.2.1/hadoop-*.jar libext/
  3. [shirdrn@oozie-server oozie-3.3.2]$ cp ~/cloud/programs/hadoop-1.2.1/lib/*.jar ./libext/
  4. </font></font>
复制代码

同时,我们使用了MySQL来存储Oozie的元数据,现在需要将MySQL的驱动程序添加到libext目录下:


  1. <font color="rgb(64, 64, 64)"><font face="Ubuntu">cp ~/packages/mysql-connector-java-5.1.29/mysql-connector-java-5.1.29/mysql-connector-java-5.1.29-bin.jar libext/</font></font>
复制代码

执行下面的命令开始安装:


  1. <font color="rgb(64, 64, 64)"><font face="Ubuntu">bin/oozie-setup.sh prepare-war
  2. </font></font>
复制代码

这样,上述已经生成了/home/shirdrn/cloud/programs/oozie-3.3.2/distro/target/oozie-3.3.2-distro/oozie-3.3.2/oozie-server/webapps/oozie.war文件。


配置Oozie

修改conf/oozie-site.xml配置文件,内容如下所示:


  1. <font color="rgb(64, 64, 64)"><font face="Ubuntu"><property>
  2.     <name>oozie.service.JPAService.jdbc.driver</name>
  3.     <value>com.mysql.jdbc.Driver</value>
  4.     <description>
  5.         JDBC driver class.
  6.     </description>
  7. </property>
  8. <property>
  9.     <name>oozie.service.JPAService.jdbc.url</name>
  10.     <value>jdbc:mysql://mysql-server:3306/oozie</value>
  11.     <description>
  12.         JDBC URL.
  13.     </description>
  14. </property>
  15. <property>
  16.     <name>oozie.service.JPAService.jdbc.username</name>
  17.     <value>shirdrn</value>
  18.     <description>
  19.         DB user name.
  20.     </description>
  21. </property>
  22. <proerty>
  23.     <name>oozie.service.JPAService.jdbc.password</name>
  24.     <value>0o21e</value>
  25.     <description>
  26.         DB user password.
  27.         IMPORTANT: if password is emtpy leave a 1 space string, the service trims the value,
  28.                    if empty Configuration assumes it is NULL.
  29.     </description>
  30. </property>
  31. </font></font>
复制代码

默认情况下,Oozie的配置中有个配置项oozie.service.JPAService.create.db.schema,值为false,设置非自动创建数据库,我们保持默认设置,这样可以通过手动创建Oozie数据库,并对其进行权限控制。然后,我们在MySQL数据库中创建数据库,名称为oozie,并进行访问授权:


  1. <font color="rgb(64, 64, 64)"><font face="Ubuntu">CREATE DATABASE oozie;
  2. GRANT ALL ON oozie.* TO 'shirdrn'@'oozie-server' IDENTIFIED BY '0o21e';
  3. FLUSH PRIVILEGES;
  4. </font></font>
复制代码

然后可以执行如下命令,生成Oozie所需要的数据表:


  1. <font color="rgb(64, 64, 64)"><font face="Ubuntu">bin/ooziedb.sh create -sqlfile oozie.sql -run</font></font>
复制代码

查看控制台输出日志,没有报错,并且在当前目录下可以看到,同时也生成了oozie.sql脚本文件。到MySQL数据库中可以看到生成的表,说明上述操作执行成功。
下面可以启动Oozie,使用如下命令:


  1. <font color="rgb(64, 64, 64)"><font face="Ubuntu">        bin/oozied.sh start
  2. </font></font>
复制代码

由于启动信息过多,这里便不贴出来了!


从上面日志可以看到,Oozie管理控制台连接为http://oozie-server:11000/oozie,可以看到图形化界面。



整合Oozie和Hadoop

我们的Hadoop平台使用的是用户shirdrn,用户组为shirdrn,这里配置Hadoop代理用户也使用该用户,部署Oozie的主机名为oozie-server。修改Hadoop的配置文件core-site.xml,增加如下配置内容:


  1. <font color="rgb(64, 64, 64)"><font face="Ubuntu"><!-- OOZIE -->
  2. <property>
  3.      <name>hadoop.proxyuser.shirdrn.hosts</name>
  4. <valuee>oozie-server</value>
  5. </property>
  6. <property>
  7.      <name>hadoop.proxyuser.shirdrn.groups</name>
  8.      <value>shirdrn</value>
  9. </property>
  10. </font></font>
复制代码

修改完上述配置后,需要重新启动Hadoop集群才能生效。


安装Oozie Client

我们可以通过在外部的一个Oozie客户端去提交工作流任务,实际上就是一个客户端程序,通过与Oozie Server进行交互,提交任务,并由Oozie Server去调用执行。
我们可以回到前面解压缩Oozie发行包oozie-3.3.2.tar.gz的目录下,通过前面的构建,现在已经可以看到有一个client目录,该目录下就是Oozie的客户端相关文件。含有Oozie客户端脚本的路径,我这里为/home/shirdrn/cloud/programs/oozie-3.3.2/client/target/oozie-client-3.3.2-client/oozie-client-3.3.2。
查看Oozie客户端运行job的命令帮助信息,可以执行如下命令:


  1. <font color="rgb(64, 64, 64)"><font face="Ubuntu">cd /home/shirdrn/cloud/programs/oozie-3.3.2/client/target/oozie-client-3.3.2-client/oozie-client-3.3.2
  2. bin/oozie help
  3. bin/oozie help job
  4. </font></font>
复制代码

我们可以找到,Oozie发行包中自带的examples,我这里对应的目录是/home/shirdrn/cloud/programs/oozie-3.3.2/examples/target/oozie-examples-3.3.2-examples/examples/apps,我们可以通过运行这些例子来验证安装是否成功。
首先,将Oozie自带的examples上传到HDFS上:


  1. <font color="rgb(64, 64, 64)"><font face="Ubuntu">bin/hadoop fs -mkdir /oozie
  2. bin/hadoop fs -copyFromLocal /home/shirdrn/cloud/programs/oozie-3.3.2/examples/target/oozie-examples-3.3.2-examples/examples /user/shirdrn/examples</font></font>
复制代码


我们拿examples中的map-reduce来进行验证,修改job.properties文件,配置内容如下所示:


  1. <font color="rgb(64, 64, 64)"><font face="Ubuntu">nameNode=hdfs://m1:9000
  2. jobTracker=m1:19830
  3. queueName=default
  4. examplesRoot=examples
  5. oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/apps/map-reduce
  6. outputDir=map-reduce
  7. </font></font>
复制代码

我的环境下,Namenode服务端口为hdfs://m1:9000,JobTracker为m1:19830,运行任务,执行如下命令:


  1. <font color="rgb(64, 64, 64)"><font face="Ubuntu">cd /home/shirdrn/cloud/programs/oozie-3.3.2/client/target/oozie-client-3.3.2-client/oozie-client-3.3.2
  2. bin/oozie job -oozie http://oozie-server:11000/oozie -config /home/shirdrn/cloud/programs/oozie-3.3.2/examples/target/oozie-examples-3.3.2-examples/examples/apps/map-reduce/job.properties -run</font></font>
复制代码


可以通过OozieWeb管理控制台查看提交运行的任务,如图所示:

1-oozie-web-console.png

以及,job配置,运行状态等信息,如图所示:

2-oozie-job-detail.png


上面命令选项-run表示直接运行一个job,当然你可以使用其他选项,如-submit是提交job,-rerun是重新运行job,-suspend是挂起job等等,可以查看命令帮助,或参考相关文档。







已有(3)人评论

跳转到指定楼层
chuyuan_zhou 发表于 2014-12-9 10:34:56
哎,这开源码太多,都不知道版本怎么对应了!
回复

使用道具 举报

chuyuan_zhou 发表于 2014-12-23 18:00:17
飘过,学习学习!
回复

使用道具 举报

saybar 发表于 2015-4-10 09:11:19
谢谢楼主学习了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条