最近公司要使用hue这个软件来作为hadoop图形化用户界面。hue由我一个同事搭建成功,我发现使用hue来创建工作流(workflow)时需要oozie的支持,以前只知道oozie是一个hadoop任务调度器,但是一直没使用过,今天正好趁这个机会尝试一下。
环境说明
CentOS release 6.6 (Final)
hadoop 2.6.0
oozie 4.1.0
jdk 1.7.0_40
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,否则会编译失败。
1.7
另一个需要改的property是hadoop.version,我这里用的是2.6.0,但是oozie本身只支持到2.3.0(大家可以去这里看看,截止到2015-5-7,只支持到hadoop2.3.0),所以这里改为
2.3.0
还有其他的像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
这个配置文件,我这里只列举修改的部分
oozie.service.JPAService.create.db.schema
true
oozie.service.JPAService.jdbc.driver
com.mysql.jdbc.Driver
oozie.service.JPAService.jdbc.url
jdbc:mysql://localhost:3306/oozie?createDatabaseIfNotExist=true
oozie.service.JPAService.jdbc.username
oozie
oozie.service.JPAService.jdbc.password
oozie
oozie.service.HadoopAccessorService.hadoop.configurations
*=/opt/hadoop/etc/hadoop
oozie.service.ProxyUserService.proxyuser.hue.hosts
*
oozie.service.ProxyUserService.proxyuser.hue.groups
*
确保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://:8020
这把hadoop的一些jar包传到hdfs上,后面会用到。
到此为止,运行server的准备工作就都做好了,在开启server之前,我们还需要对hadoop的core-site.xml
做如下修改:
hadoop.proxyuser.oozie.hosts
*
hadoop.proxyuser.oozie.groups
*
上面这两个配置是为oozie添加伪装功能(impersonation),关于伪装功能,我这里不在细说,大家可以看本篇文章最后参考文章中的第三篇。
添加伪装功能后,不需要重启hdfs与yarn,执行下面的命令即可:
hdfs dfsadmin -refreshSuperUserGroupsConfiguration
yarn rmadmin -refreshSuperUserGroupsConfiguration
最后,激动人心的时候就要到了,根据上面伪装功能的配置,我用oozie用户开启server:
bin/oozied.sh start
如果,你上面的步骤都正确,那么你应该能看到下面的页面(默认端口是:11000):