編譯:
使用的環境是:Hadoop2.6.0、Spark1.4.0、Hive0.13.1、Sqoop1.4.4
編譯Oozie的命令:./mkdistro.sh -Phadoop-2 -Dhadoop.auth.version=2.6.0 -Ddistcp.version=2.6.0 -Dsqoop.version=1.4.4 -Dhive.version=0.13.1 -Dpig.version=0.15.0
(突然發現,編譯時沒有指定Spark的版本)
經過艱難漫長的編譯過程,最后得到了oozie-4.2.0-distro.tar.gz。
Oozie4.2 Server安裝
所需環境:
Unix (tested in Linux and Mac OS X)
Java 1.6+
Hadoop(tested with 1.0.0 & 0.23.1)
ExtJS library (可選, 用於Oozie webconsole,本文檔中使用)
MySQL(可選,本文檔中使用)
開始安裝:
將編譯好的oozie-4.2.0-distro.tar.gz解壓到/opt下
1、修改環境變量
vim /etc/profile,加入OOZIE_HOME這個環境變量,並在PATH中加入$OOZIE_HOME/bin,保存退出,然后執行source /etc/profile
2、修改/opt/oozie-4.2.0/conf下的 oozie-site.xml文件,在oozie-site.xml中增加以下配置信息:
<!--mysql作為元數據存放的數據庫--> <property> <name>oozie.service.JPAService.jdbc.driver</name> <value>com.mysql.jdbc.Driver</value> <description> JDBC driver class. </description> </property> <property> <name>oozie.service.JPAService.jdbc.url</name> <value>jdbc:mysql://192.168.127.11:3306/oozie</value> <description> JDBC URL. </description> </property> <property> <name>oozie.service.JPAService.jdbc.username</name> <value>root</value> <description> DB user name. </description> </property> <property> <name>oozie.service.JPAService.jdbc.password</name> <value>123456</value> <description> DB user password. IMPORTANT: if password is emtpy leave a 1 space string, the service trims the value, if empty Configuration assumes it is NULL. </description> </property> <!--設置Hadoop的配置文件的路徑--> <property> <name>oozie.service.HadoopAccessorService.hadoop.configurations</name> <value>*=/opt/hadoop-2.6.0/etc/hadoop</value> <description> Comma separated AUTHORITY=HADOOP_CONF_DIR, where AUTHORITY is the HOST:PORT of the Hadoop service (JobTracker, YARN, HDFS). The wildcard '*' configuration is used when there is no exact match for an authority. The HADOOP_CONF_DIR contains the relevant Hadoop *-site.xml files. If the path is relative is looked within the Oozie configuration directory; though the path can be absolute (i.e. to point to Hadoop client conf/ directories in the local filesystem. </description> </property> <!--設置Spark的配置文件的路徑--> <property> <name>oozie.service.SparkConfigurationService.spark.configurations</name> <value>*=/opt/spark-1.4.0-bin-hadoop2.6-hive/conf</value> <description> Comma separated AUTHORITY=SPARK_CONF_DIR, where AUTHORITY is the HOST:PORT of the ResourceManager of a YARN cluster. The wildcard '*' configuration is used when there is no exact match for an authority. The SPARK_CONF_DIR contains the relevant spark-defaults.conf properties file. If the path is relative is looked within the Oozie configuration directory; though the path can be absolute. This is only used when the Spark master is set to either "yarn-client" or "yarn-cluster". </description> </property> <!-- 設置系統庫存放在hdfs中,注意只有在job.properties中將設置oozie.use.system.libpath=true才會引用系統庫 。注意,下面ns1是namenode的邏輯名稱,根據自己集群的情況進行更改即可--> <property> <name>oozie.service.WorkflowAppService.system.libpath</name> <value>hdfs://ns1/user/${user.name}/share/lib</value> <description> System library path to use for workflow applications. This path is added to workflow application if their job properties sets the property 'oozie.use.system.libpath' to true. </description> </property>
3、在Hadoop配置文件的core-site.xml中增加如下配置信息。注意:修改完后,需要重啟hadoop。
<!-- <property> <name>hadoop.proxyuser.[OOZIE_SERVER_USER].hosts</name> <value>[OOZIE_SERVER_HOSTNAME]</value> </property> <property> <name>hadoop.proxyuser.[OOZIE_SERVER_USER].groups</name> <value>[USER_GROUPS_THAT_ALLOW_IMPERSONATION]</value> </property> 其中[OOZIE_SERVER_USER]是安裝使用oozie server的用戶 [OOZIE_SERVER_HOSTNAME]是安裝oozie server的主機名 [USER_GROUPS_THAT_ALLOW_IMPERSONATION]是用戶的所屬組 以上漢字純屬個人見解,如有問題歡迎指正 --> <!-- OOZIE --> <property> <name>hadoop.proxyuser.root.hosts</name> <value>centos01</value> </property> <property> <name>hadoop.proxyuser.root.groups</name> <value>root</value> </property>
注意:在hadoop.proxyuser.root.groups的值改成*,也是可以運行的。
4、在/opt/oozie-4.2.0目錄下創建一個libext目錄,並在/opt/hadoop-2.6.0目錄下使用以下命令將Hadoop下的所有jar包復制到libext目錄中:find -name *.jar |xargs -t -i cp {} /opt/oozie-4.2.0/libext。注意:需要將libext中的hsqldb-2.0.0.jar刪掉,否則會引起jar包沖突。
5、將下載好的ext-2.2.zip以及mysql驅動包(例如:mysql-connector-java-5.1.35.jar)復制到libext目錄下。
6、執行下面的命令,將ext2.2.0.zip、hadoop的相關jar包、以及mysql-connector-java-<版本>.jar、htrace-core-<版本>.jar、avro-<版本>.jar 打進新war包里:
bin/addtowar.sh -inputwar oozie.war -outputwar oozie-server/webapps/oozie.war -hadoop 2.6.0 /opt/hadoop-2.6.0/ -extjs libext/ext-2.2.zip -jars /opt/oozie-4.2.0/libext/mysql-connector-java-5.1.35.jar:/opt/oozie-4.2.0/libext/htrace-core-3.0.4.jar:/opt/oozie-4.2.0/libext/avro-1.7.4.jar
注意:
1) htrace-core和avro這兩個jar包不加的話,后面提交job時會出錯!並且執行了上面這句后,就不能再執行bin/oozie-setup.sh prepare-war 了,否則替換掉oozie-server/webapps/中已經生成的oozie.war。
2)在ubuntu上執行上面命令時遇到zip:command not found;Failed:Creating new Oozie WAR的問題。這是因為沒有安裝Zip導致的。裝上即可。
7、如果還沒有安裝mysql,那么需要安裝一個mysql。安裝好后嗎,在mysql數據庫中創建名為oozie的數據庫(注意:oozie-site.xml中有個配置項oozie.service.JPAService.create.db.schema,默認值為false,表示非自動創建數據庫,所以我們需要自己創建oozie數據庫),並進行訪問授權,然后在/opt/oozie-4.2.0/下執行:
bin/ooziedb.sh create -sqlfile oozie.sql -run
查看oozie數據庫,如果產生了以下的表,就說明該步驟OK
8、安裝oozie-sharelib。
1) 在oozie-4.2.0目錄下有一個 oozie-sharelib-4.2.0.tar.gz。使用tar -zxvf oozie-sharelib-4.2.0.tar.gz將它解壓。解壓出后是一個share目錄
2)進入到share/lib/sqoop中。將sqoop-1.4.6-hadoop100.jar去掉(我這邊改成sqoop-1.4.6-hadoop100.jar.bak)
注意:之所以要將sqoop-1.4.6-hadoop100.jar去掉,是因為我發現,在不去掉的情況下,運行Sqoop的例子會報錯。這個錯誤可能是sqoop-1.4.6-hadoop100和sqoop-1.4.4-hadoop200.jar中的類沖突導致的。去掉之后,就可以成功運行了。
3)將mysql-connector-java-5.1.35.jar復制到/opt/oozie-4.2.0/share/lib/sqoop目錄中。如果沒有這個jar,將不能從mysql將數據導入或導出。
3)將這個share上傳到hdfs上:
hdfs dfs -put /opt/oozie-4.2.0/share /user/root
注意,與oozie-site.xml中的oozie.service.WorkflowAppService.system.libpath的值保持一致,所以必須放到/user/root這個目錄下。
9、使用以下命令啟動oozie服務:
bin/oozie-start.sh
這時在/opt/oozie-4.2.0/oozie-server/webapps目錄下多了oozie這個目錄。如果缺少jar包或者jar包沖突了可以對
/opt/oozie-4.2.0/oozie-server/webapps/oozie/WEB-INF/lib中的進行添加或刪除jar包
10、使用以下命令驗證服務是否啟動成功,
oozie admin -oozie http://localhost:11000/oozie -status
如果是System model:Normal,表明啟動成功,否則失敗。
11、查看是否可以通過瀏覽器訪問web頁面:
http://192.168.127.11:11000/oozie/
12、在運行job之前,最好開啟Hadoop的jobhistory。它可以幫助你查看job調度時產生的日志。啟動命令:
mr-jobhistory-daemon.sh start historyserver
使用jps命令查看是否啟動成功,如果出現了 JobHistoryServer進程,表示啟動成功。
(如果在第3步中hadoop還沒有重啟,需要重啟下,否則后面的job可能會運行失敗)
Oozie4.2 Client安裝
Oozie server 安裝中已經包括了Oozie client。如果想要在其他機子上也使用Oozie,那么只要在那些機子上安裝Oozei的client即可。
所需環境:
Unix (tested in Linux and Mac OS X)
Java 1.6+
開始安裝
1、Oozie4.2中有一個oozie-client-4.2.0.tar.gz,將它復制到需要安裝oozie client的機子上
2、解壓:
tar zxvf /data/insallers/oozie-client-4.2.0.tar.gz -C /opt
這時在/opt下有一個 oozie-client-4.2.0
3、添加環境變量:
注意:上面還可以添加一個環境變量,export OOZIE_URL=http://centos01:11000/oozie這樣在后面的oozie job這個命令中就不需要加 -oozie了
4、然后可以直接使用oozie來操作了,例如:
可以使用oozie job -oozie http://centos01:11000/oozie -config /data/installers/examples/apps/sqoop/job.properties -run 這樣的命令來操作了。
Oozie Examples
1、在/opt/oozie-4.2.0下有一個oozie-examples.tar.gz 。將它進行解壓,解壓之后生成一個examples目錄。在該目錄的apps中有一些簡單的例子:
2、在運行這些例子之前,需要對這些例子進行一些修改,例如我們運行shell這個例子。
先來查看一下job.properties的內容:
這些例子中JobTracker 都是localhost:8021,NameNode 都是hdfs://localhost:8020 。這是hadoop1的端口。我們需要根據自己集群的情況,對它做相應的修改。我現在的hadoop集群是2.6.0版本的。並且NameNode和ResourceManager都是HA的。所以我的配置是:
注意:這里ns1 是hadoop中hdfs-site.xml中的dfs.nameservices。rm1,rm2是yarn-site.xml中的yarn.resourcemanager.ha.rm-ids(如下2圖)。如果ResourceManager不采用HA,采用的是單點,那么將8021這個端口改成8032端口(yarn.resourcemanager.address)。例如:ResourceManager所在的主機名centos03,那么改成jobTracker=centos03:8032即可。

3、將examples這個文件上傳到hdfs中的/user/${user.name} 中,我采用的是root這個用戶,所以是/user/root


oozie job -oozie http://centos01:11000/oozie -log 0000001-150804235314037-oozie-root-W

參考網站:
https://hadooptutorial.info/oozie-share-lib-does-not-exist-error/#javaioFileNotFoundException_File_userusersharelib_does_not_exist
http://blog.csdn.net/teddeyang/article/details/16339533
http://oozie.apache.org/docs/4.2.0/AG_Install.html
http://www.cloudera.com/content/cloudera/en/documentation/cdh4/v4-2-0/CDH4-Installation-Guide/cdh4ig_topic_17_6.html
http://stackoverflow.com/questions/11555344/sqoop-export-fail-through-oozie
以下主要是我在安裝使用oozie時遇到的一些問題,如果按照上面的步驟安裝使用,可能就不會出現下面的問題了,可以忽略不看!
1、關於addtower命令:
2、遇到過的問題:
1)編譯時出現,解決方法:手動下載maven-clean-plugin插件的jar
2)編譯時出現,解決方法:mvn dependency::tree
3)編譯時出現,解決方法:手動下載依賴
4)安裝時出現。解決方法:移除libext中的hsqldb-2.0.0.jar
5) 安裝時出現,使用“bin/addtowar.sh -inputwar oozie.war -outputwar oozie-server/webapps/oozie.war -hadoop 2.6.0 /opt/hadoop-2.6.0/ -extjs libext/ext-2.2.zip”命令替代“bin/oozie-setup.sh prepare-war”這個命令來解決。原因可能是后面的命令會將libext中雜七雜八的jar包放入到oozie-server/webapps/oozie/WEB-INF/lib/ 中,引起jar包沖突等問題。
6)有時出現無法啟動或關閉oozie服務時,嘗試將/opt/oozie-4.2.0/oozie-server/temp下的除了safeToDelete.tmp文件的其他文件刪掉,即可(即只保留safeToDelete.tmp)。
7) oozie服務啟動失敗:
在/opt/oozie-4.2.0/logs中查看catalina.out這個日志,根據提示信息,應該是沒有mysql驅動的原因。
將mysql驅動包復制到oozie-server/webapps/oozie/WEB-INF/lib/下:
cp libext/mysql-connector-java-5.1.35.jar oozie-server/webapps/oozie/WEB-INF/lib/
重新執行第9和第10步,現在oozie服務已經成功啟動了:
8)、提交job時出現“Error:HTTP error code:500:Internal Server Error”的問題
發現在localhost.2015-08-03.log這個日志文件中記錄了這個錯誤:
解決方法:往oozie-server/webapps/oozie/WEB-INF/lib/ 中加入htrace-core-3.0.4.jar
9)、job執行完成后出現。解決方法:往oozie-server/webapps/oozie/WEB-INF/lib/ 中加入avro-1.7.4.jar
10)、執行sqoop相關jab后出現。解決方法:去掉share/lib/sqoop中的sqoop-1.4.6-hadoop100.jar