最近公司要使用hue這個軟件來做爲hadoop圖形化用戶界面。hue由我一個同事搭建成功,我發現使用hue來建立工做流(workflow)時須要oozie的支持,之前只知道oozie是一個hadoop任務調度器,可是一直沒使用過,今天正好趁這個機會嘗試一下。html
CentOS release 6.6 (Final)java
hadoop 2.6.0node
oozie 4.1.0mysql
jdk 1.7.0_40web
maven 3.2.3sql
我這裏使用的版本都是較新的版本。安裝oozie的先決條件是hadoop已經成功部署.數據庫
還須要說明的是,oozie 自己 apache 只提供源碼,須要本身編譯,編譯須要的軟件在官方有說明: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也能成功編譯。api
oozie使用maven構建,因此第一步就是安裝maven,並把maven的bin目錄加入到PATH中,這一步比較簡單,這裏再也不贅述。tomcat
首先去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
通過上面的編譯,咱們獲得了二進制版的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):