1

最近公司要使用hue这个软件来作为hadoop图形化用户界面。hue由我一个同事搭建成功,我发现使用hue来创建工作流(workflow)时需要oozie的支持,以前只知道oozie是一个hadoop任务调度器,但是一直没使用过,今天正好趁这个机会尝试一下。

环境说明

  1. CentOS release 6.6 (Final)

  2. hadoop 2.6.0

  3. oozie 4.1.0

  4. jdk 1.7.0_40

  5. maven 3.2.3

我这里使用的版本都是较新的版本。安装oozie的先决条件是hadoop已经成功部署.

还需要说明的是,oozie 本身 apache 只提供源码,需要自己编译,编译需要的软件在官方有说明


Unix box (tested on Mac OS X and Linux)
Java JDK 1.6+
Maven 3.0.1+
Hadoop 0.20.2+
Pig 0.7+

我这里在安装时并没有安装pig也能成功编译。

安装步骤

1. maven安装

oozie使用maven构建,所以第一步就是安装maven,并把maven的bin目录加入到PATH中,这一步比较简单,这里不再赘述。

2. 编译oozie

首先去oozie官网下载,可以执行

wget http://mirrors.cnnic.cn/apache/oozie/4.1.0/oozie-4.1.0.tar.gz

解压该文件,这里需要修改下pom.xml文件中的几个property,首先是java版本,我这里用的1.7,它默认的是1.6,这里不能用1.8,否则会编译失败。

<targetJavaVersion>1.7</targetJavaVersion>

另一个需要改的property是hadoop.version,我这里用的是2.6.0,但是oozie本身只支持到2.3.0(大家可以去这里看看,截止到2015-5-7,只支持到hadoop2.3.0),所以这里改为

<hadoop.version>2.3.0</hadoop.version>

还有其他的像hive、hbase的版本,大家可以根据实际情况修改。

好,上面的都改完后,就可以编译了:

bin/mkdistro.sh -DskipTests -Dhadoop.version=2.3.0

编译使用oozie提供的mkdistro.sh脚本,需要注意的是,这里我们又一次指定了hadoop版本,我第一次没有指定,用的是貌似还是1.1.0,所以这里保险,大家在指定次吧。

编译时会去下载各种依赖jar包,这是就要看你的网速如何了。当你看到类似下面的信息时,恭喜你,编译成功了。

[INFO] Reactor Summary:
[INFO]
[INFO] Apache Oozie Main .................................. SUCCESS [  1.440 s]
[INFO] Apache Oozie Client ................................ SUCCESS [ 22.217 s]
[INFO] Apache Oozie Hadoop 1.1.1.oozie-4.1.0 .............. SUCCESS [  0.836 s]
[INFO] Apache Oozie Hadoop Distcp 1.1.1.oozie-4.1.0 ....... SUCCESS [  0.065 s]
[INFO] Apache Oozie Hadoop 1.1.1.oozie-4.1.0 Test ......... SUCCESS [  0.182 s]
[INFO] Apache Oozie Hadoop Utils 1.1.1.oozie-4.1.0 ........ SUCCESS [  0.784 s]
[INFO] Apache Oozie Hadoop 2.3.0.oozie-4.1.0 .............. SUCCESS [  4.803 s]
[INFO] Apache Oozie Hadoop 2.3.0.oozie-4.1.0 Test ......... SUCCESS [  0.254 s]
[INFO] Apache Oozie Hadoop Distcp 2.3.0.oozie-4.1.0 ....... SUCCESS [  0.066 s]
[INFO] Apache Oozie Hadoop Utils 2.3.0.oozie-4.1.0 ........ SUCCESS [  1.033 s]
[INFO] Apache Oozie Hadoop 0.23.5.oozie-4.1.0 ............. SUCCESS [  3.231 s]
[INFO] Apache Oozie Hadoop 0.23.5.oozie-4.1.0 Test ........ SUCCESS [  0.336 s]
[INFO] Apache Oozie Hadoop Distcp 0.23.5.oozie-4.1.0 ...... SUCCESS [  0.062 s]
[INFO] Apache Oozie Hadoop Utils 0.23.5.oozie-4.1.0 ....... SUCCESS [  0.878 s]
[INFO] Apache Oozie Hadoop Libs ........................... SUCCESS [  3.780 s]
[INFO] Apache Oozie Hbase 0.94.2.oozie-4.1.0 .............. SUCCESS [  0.338 s]
[INFO] Apache Oozie Hbase Libs ............................ SUCCESS [  0.692 s]
[INFO] Apache Oozie HCatalog 0.13.1.oozie-4.1.0 ........... SUCCESS [  0.919 s]
[INFO] Apache Oozie HCatalog Libs ......................... SUCCESS [  1.735 s]
[INFO] Apache Oozie Share Lib Oozie ....................... SUCCESS [ 13.552 s]
[INFO] Apache Oozie Share Lib HCatalog .................... SUCCESS [ 40.232 s]
[INFO] Apache Oozie Core .................................. SUCCESS [05:03 min]
[INFO] Apache Oozie Docs .................................. SUCCESS [01:07 min]
[INFO] Apache Oozie Share Lib Pig ......................... SUCCESS [01:38 min]
[INFO] Apache Oozie Share Lib Hive ........................ SUCCESS [ 12.927 s]
[INFO] Apache Oozie Share Lib Sqoop ....................... SUCCESS [  5.655 s]
[INFO] Apache Oozie Share Lib Streaming ................... SUCCESS [  4.577 s]
[INFO] Apache Oozie Share Lib Distcp ...................... SUCCESS [  1.900 s]
[INFO] Apache Oozie WebApp ................................ SUCCESS [02:26 min]
[INFO] Apache Oozie Examples .............................. SUCCESS [  3.762 s]
[INFO] Apache Oozie Share Lib ............................. SUCCESS [ 11.415 s]
[INFO] Apache Oozie Tools ................................. SUCCESS [ 10.718 s]
[INFO] Apache Oozie MiniOozie ............................. SUCCESS [  9.647 s]
[INFO] Apache Oozie Distro ................................ SUCCESS [ 27.966 s]
[INFO] Apache Oozie ZooKeeper Security Tests .............. SUCCESS [  7.040 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 13:32 min
[INFO] Finished at: 2015-05-07T14:51:39+08:00
[INFO] Final Memory: 139M/1329M
[INFO] ------------------------------------------------------------------------

Oozie distro created, DATE[2015.05.07-06:38:04GMT] VC-REV[unavailable], available at [/data/users/xigua/oozie-4.1.0/distro
/target]

编译后的文件在distro/target文件夹内,我这里文件名为oozie-4.1.0-distro.tar.gz

3. 安装oozie server

经过上面的编译,我们得到了二进制版的oozie,下面就可以部署server了,由此可见oozie使用的BS模式。
解压oozie-4.1.0-distro.tar.gz这个编译后的文件,进入改目录,创建个文件夹

mkdir libext

oozie server 需要用到一个js库,但是该js库官方给的链接已经失效了,我废了好大劲在网上找了个,传到了csdn上,大家下载后把ext-2.2.zip这个文件放的libext文件夹里。
然后,把hadoop的一些jar把也放到这个libext文件夹内,大家可参考下面这个命令

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

这里有个大坑,oozie server默认使用tomcat 6.0.41,而hadoop也有内置的server,如果按照上面两个命令把hadoop依赖的jar包都拷贝过去,有可能出现冲突,这两个server使用的servlet、jsp版本很可能不一样。

这里需要把这几个jar包删除,不要放到libext中

jasper-compiler-5.5.23.jar
jasper-runtime-5.5.23.jar
jsp-api-2.1.jar

如果你用的hadoop版本不是2.6.0,那么这里的版本有可能不一样,但务必确保,把这三个jar删除。我当时找出这三个jar包,废了2个多小时,心情很是受打击。

oozie server还需要依赖个数据库,我这里用的是常用的mysql,所以需要把mysql的驱动jar包也放的libext中。

然后修改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://localhost:3306/oozie?createDatabaseIfNotExist=true</value>
</property>

<property>
    <name>oozie.service.JPAService.jdbc.username</name>
    <value>oozie</value>
</property>

<property>
    <name>oozie.service.JPAService.jdbc.password</name>
    <value>oozie</value>
</property>
<property>
    <name>oozie.service.HadoopAccessorService.hadoop.configurations</name>
    <value>*=/opt/hadoop/etc/hadoop</value>
</property> 
<!-- 下面两个配置是hue用到的-->
<property>
    <name>oozie.service.ProxyUserService.proxyuser.hue.hosts</name>
    <value>*</value>
</property>

<property>
    <name>oozie.service.ProxyUserService.proxyuser.hue.groups</name>
    <value>*</value>
</property>

确保mysql中oozie用户有创建数据库的权限,如果不放心,我们可以先创建出来:

create database oozie;
grant all privileges on oozie.* to oozie@'%' identified by 'oozie';
FLUSH PRIVILEGES;

上面的配置中,指定了hadoop配置文件位置:*=/opt/hadoop/etc/hadoop,这里的*=不能少,你根据实际情况修改你的hadoop路径即可。

好,上面的步骤完成后,就可以生产server的war包了:

bin/oozie-setup.sh prepare-war

你会看到下面一系列输出:

  setting CATALINA_OPTS="$CATALINA_OPTS -Xmx1024m"

INFO: Adding extension: /opt/.versions/oozie-4.1.0/libext/activation-1.1.jar
INFO: Adding extension: /opt/.versions/oozie-4.1.0/libext/aopalliance-1.0.jar
INFO: Adding extension: /opt/.versions/oozie-4.1.0/libext/apacheds-i18n-2.0.0-M15.jar
INFO: Adding extension: /opt/.versions/oozie-4.1.0/libext/apacheds-kerberos-codec-2.0.0-M15.jar
INFO: Adding extension: /opt/.versions/oozie-4.1.0/libext/api-asn1-api-1.0.0-M20.jar
INFO: Adding extension: /opt/.versions/oozie-4.1.0/libext/api-util-1.0.0-M20.jar
INFO: Adding extension: /opt/.versions/oozie-4.1.0/libext/asm-3.2.jar
INFO: Adding extension: /opt/.versions/oozie-4.1.0/libext/avro-1.7.4.jar
INFO: Adding extension: /opt/.versions/oozie-4.1.0/libext/aws-java-sdk-1.7.4.jar
...
...
jar 包太多,我这里就忽略了
...
...
INFO: Adding extension: /opt/.versions/oozie-4.1.0/libext/xz-1.0.jar
INFO: Adding extension: /opt/.versions/oozie-4.1.0/libext/zookeeper-3.4.6.jar

New Oozie WAR file with added 'ExtJS library, JARs' at /opt/.version/oozie-4.1.0/oozie-server/webapps/oozie.war


INFO: Oozie is ready to be started

好,看到这里说明server已经生成了。

在启动之前,我们还需要把执行下面的命令:

bin/oozie-setup.sh  sharelib  create -fs hdfs://<namenode-hostname>:8020

这把hadoop的一些jar包传到hdfs上,后面会用到。

到此为止,运行server的准备工作就都做好了,在开启server之前,我们还需要对hadoop的core-site.xml做如下修改:

<property>
   <name>hadoop.proxyuser.oozie.hosts</name>
   <value>*</value>
</property>
<property>
   <name>hadoop.proxyuser.oozie.groups</name>
   <value>*</value>
</property>

上面这两个配置是为oozie添加伪装功能(impersonation),关于伪装功能,我这里不在细说,大家可以看本篇文章最后参考文章中的第三篇。
添加伪装功能后,不需要重启hdfs与yarn,执行下面的命令即可:

hdfs dfsadmin -refreshSuperUserGroupsConfiguration
yarn rmadmin -refreshSuperUserGroupsConfiguration

最后,激动人心的时候就要到了,根据上面伪装功能的配置,我用oozie用户开启server:

bin/oozied.sh start

如果,你上面的步骤都正确,那么你应该能看到下面的页面(默认端口是:11000):
oozie server

参考文章:

  1. Oozie安装与部署

  2. Hadoop Oozie学习笔记(一) 自定义安装和启动

  3. Hadoop 2.0中用户安全伪装/模仿机制实现原理


刘家财
1.7k 声望97 粉丝

Lisp、编译原理爱好者