Linux安裝oozie(填坑手記)

目錄

版本和系統要求

maven安裝

下載

解壓

配置環境變量

測試安裝

Pig安裝

下載

解壓

配置

驗證

oozie安裝

下載源碼包

解壓源碼包

源碼編譯

server安裝

client安裝


原文鏈接

版本和系統要求

本文安裝oozie版本:oozie-5.2.0.tar.gz

oozie官網安裝系統要求:

  • Unix box (tested on Mac OS X and Linux)
  • Java JDK 1.8+
  • Maven 3.0.1+
  • Hadoop 2.6.0+
  • Pig 0.10.1+

 

maven安裝

下載

下載地址:apache-maven-3.6.3-bin.tar.gz

 

解壓

執行如下命令,解壓到/opt目錄下:

tar -zxvf /root/tools/apache-maven-3.6.3-bin.tar.gz -C /opt/

修改解壓後的目錄名稱:

mv apache-maven-3.6.3 /opt/maven

 

配置環境變量

打開配置文件:

vi /etc/profile

配置內容如下:

# maven
export MAVEN_HOME=/opt/maven
export PATH=$PATH:$MAVEN_HOME/bin

配置生效:

source /etc/profile

 

測試安裝

命令如下:

mvn -version

[root@single opt]# mvn -version
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /opt/maven
Java version: 1.8.0_144, vendor: Oracle Corporation, runtime: /opt/jdk/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-693.el7.x86_64", arch: "amd64", family: "unix"
 

Pig安裝

安裝pig前需要先安裝好JDK和Hadoop,請參見筆者關於Hadoop安裝的博文。

下載

下載地址:pig-0.17.0.tar.gz

 

解壓

將pig解壓到/opt目錄下:

tar -zxvf /root/tools/pig-0.17.0.tar.gz -C /opt/

修改pig目錄名稱:

mv pig-0.17.0 pig

 

配置

打開配置文件:

vi /etc/profile

內容如下:

# pig
export PIG_HOME=/opt/pig
export PATH=$PATH:$PIG_HOME/bin

配置生效:

source /etc/profile

 

驗證

需要先啓動Hadoop集羣(啓動命令start-all.sh)。執行pig命令,啓動pig

[root@single opt]# pig
20/06/19 13:14:30 INFO pig.ExecTypeProvider: Trying ExecType : LOCAL
20/06/19 13:14:30 INFO pig.ExecTypeProvider: Trying ExecType : MAPREDUCE
20/06/19 13:14:30 INFO pig.ExecTypeProvider: Picked MAPREDUCE as the ExecType
2020-06-19 13:14:30,538 [main] INFO  org.apache.pig.Main - Apache Pig version 0.17.0 (r1797386) compiled 
Jun 02 2017, 15:41:582020-06-19 13:14:30,538 [main] INFO  org.apache.pig.Main - Logging error messages to: /opt/pig_1592543670
537.log2020-06-19 13:14:30,585 [main] INFO  org.apache.pig.impl.util.Utils - Default bootup file /root/.pigbootu
p not found2020-06-19 13:14:31,633 [main] INFO  org.apache.hadoop.conf.Configuration.deprecation - mapred.job.tracke
r is deprecated. Instead, use mapreduce.jobtracker.address2020-06-19 13:14:31,633 [main] INFO  org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Con
necting to hadoop file system at: hdfs://single:90002020-06-19 13:14:32,744 [main] INFO  org.apache.pig.PigServer - Pig Script ID for the session: PIG-defaul
t-b297a241-b4bf-4593-a6f6-785dbb7e16592020-06-19 13:14:32,744 [main] WARN  org.apache.pig.PigServer - ATS is disabled since yarn.timeline-servi
ce.enabled set to false

grunt>

其中

20/06/19 13:14:30 INFO pig.ExecTypeProvider: Picked MAPREDUCE as the ExecType

檢測到了已經安裝的Hadoop(Hadoop已經啓動)。

注:pig -version命令也可以測試。

 

oozie安裝

下載源碼包

下載地址:oozie-5.2.0.tar.gz

遺憾的是,oozie沒有直接提供二進制包,僅提供了源碼包,後面需要編譯。

 

解壓源碼包

執行如下命令,將源碼包解壓到同一目錄:

tar -zxvf /root/tools/oozie-5.2.0.tar.gz -C /root/tools/

解壓後的源碼目錄結構:

 

源碼編譯

執行如下命令編譯:

mkdistro.sh -DskipTests

編譯過程如下:

下載相關依賴,接下來就是漫長的等待(筆者等待半天,中間有斷過網)。當然可以顯示指定依賴的版本:

mkdistro.sh -DskipTests -Puber
-Dhadoop.version=<version> - default 2.6.0
-Ptez - Bundle tez jars in hive and pig sharelibs. Useful if you want to use tez
+as the execution engine for those applications.
-Dpig.version=<version> - default 0.16.0
-Dpig.classifier=<classifier> - default h2
-Dsqoop.version=<version> - default 1.4.7
-Dsqoop.classifier=<classifier> - default hadoop260
-Djetty.version=<version> - default 9.3.20.v20170531
-Dopenjpa.version=<version> - default 2.2.2
-Dxerces.version=<version> - default 2.10.0
-Dcurator.version=<version> - default 2.5.0
-Dhive.version=<version> - default 1.2.2
-Dhbase.version=<version> - default 1.2.3
-Dtez.version=<version> - default 0.8.4

在<version>中可以填寫具體的版本,- default表示默認版本。這裏mkdistro.sh -DskipTests命令會使用默認版本。

最後編譯成功後如圖:

圖中顯示時長是02:44,筆者認爲不科學。編譯成功後,我們需要的包在distro/target/oozie-5.2.0-distro.tar.gz。

 

        oozie的安裝分爲server和client安裝。下面先按照server。


server安裝

需要事先安裝好關係型數據庫,用於保存oozie元數據,筆者選用的數據庫是mysql。

(1)解壓編譯後的包

編譯後的包在  /root/tools/oozie-5.2.0/distro/target下,如圖:

tar -zxvf /root/tools/oozie-5.2.0/distro/target/oozie-5.2.0-distro.tar.gz -C /opt

修改oozie目錄名稱:

mv /opt/oozie-5.2.0 /opt/oozie

解壓後目錄結構如下:

 

(2)配置環境變量

打開配置文件:

vi /etc/profile

配置內容如下:

# oozie server
export OOZIE_HOME=/opt/oozie
export PATH=$PATH:$OOZIE_HOME/bin

配置生效:

source /etc/profile

 

(3)oozie配置

Hadoop的core-site.xml添加如下配置:

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

注:配置core-site.xml後,需要重啓Hadoop。這裏hadoop.proxyuser.[ ].hosts和hadoop.proxyuser.[ ].groups配置的是root,根據具體情況配置。

oozie-site.xml添加如下配置:

<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://192.168.128.1:3306/oozie?createDatabaseIfNotExist=true&amp;useSSL=false</value>
    <description>oozie元數據存儲數據庫名稱</description>
</property>
<property>
    <name>oozie.service.JPAService.create.db.schema</name>
    <value>true</value>
    <description>自動創建oozie數據庫</description>
</property>
<property>
    <name>oozie.service.JPAService.jdbc.username</name>
    <value>root</value>
</property>
<property>
    <name>oozie.service.JPAService.jdbc.password</name>
    <value>root</value>
</property>
<property>
    <name>oozie.service.HadoopAccessorService.hadoop.configurations</name>
    <value>*=/opt/hadoop/etc/hadoop</value>
</property>
<property>
    <name>oozie.service.WorkflowAppService.system.libpath</name>
    <value>hdfs://single:9000/user/root/share/lib</value>
    <description>oozie依賴包路徑</description>
</property>

配置oozie的元數據保存數據庫名稱爲oozie,用戶和密碼均爲root,根據情況配置。

 

(4)添加依賴包

在oozie安裝目錄下,新建libext目錄,命令如下:

mkdir libext

將mysql驅動和ext-2.2.zip拷貝到該目錄下。

如圖:

將Hadoop的common、hdfs、mapreduce和yarn目錄下的jar包拷貝到libext目錄下:

如果Hadoop的相關包沒有拷貝,可能會出現如下問題:

問題a:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/fs/FileUtil
    at org.apache.oozie.tools.OozieSharelibCLI.run(OozieSharelibCLI.java:189)
    at org.apache.oozie.tools.OozieSharelibCLI.main(OozieSharelibCLI.java:103)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.fs.FileUtil

原因是:缺少hdfs相關依賴包,將Hadoop安裝目錄下的share/hadoop/hdfs目錄下的jar包和lib中的依賴包拷貝到oozie安裝目錄下的libext下。比如:

 

問題b:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/mapred/JobConf
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)

原因是:Hadoop的mapreduce相關包未拷貝到libext目錄下。

 

問題c:

java.io.IOException: No FileSystem for scheme: hdfs
    at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2660)
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2667)
    at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:94)
    at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2703)

原因是:Hadoop中hdfs的依賴包沒有拷貝到oozie安裝目錄下的libext目錄中。

 

問題d:

java.lang.Exception: Could not connect to the database: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    at org.apache.oozie.tools.OozieDBCLI.validateConnection(OozieDBCLI.java:927)
    at org.apache.oozie.tools.OozieDBCLI.createDB(OozieDBCLI.java:192)
    at org.apache.oozie.tools.OozieDBCLI.run(OozieDBCLI.java:135)
    at org.apache.oozie.tools.OozieDBCLI.main(OozieDBCLI.java:83)
Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)

原因是:mysql的驅動依賴包未拷貝到libext目錄下。

 

問題e:

Error: Could not find or load main class org.apache.oozie.server.EmbeddedOozieServer

 

原因是:oozie安裝目錄下的embedded-oozie-server/webapp目錄不小心被我刪除了。

 

注:有時候Hadoop的相關包拷貝到libext目錄下也不能成功加載,原因未找到,直接將包拷貝到lib目錄下也可以。

 

(6)sharelib上傳到hdfs上

sharelib是oozie依賴的公共包,需要放置在hdfs的目錄中。

oozie-sharelib-5.2.0.tar.gz在oozie的安裝目錄/opt/oozie下,執行如下命令將oozie-sharelib-5.2.0.tar.gz解壓到hdfs上:

oozie-setup.sh sharelib create -fs hdfs://single:9000/user/root/share/lib -locallib oozie-sharelib-5.2.0.tar.gz

成功後如圖:

這裏是oozie各種action依賴的包。

 

可能會出現如下問題:

java.lang.IllegalArgumentException: Wrong FS: hdfs://single:9000/user/root/share/lib_1234567890, expected: hdfs://single
    at org.apache.hadoop.fs.FileSystem.checkPath(FileSystem.java:648)

原因是:命令中hdfs路徑寫錯了,必須是oozie-site.xml中配置的:

<property>
    <name>oozie.service.WorkflowAppService.system.libpath</name>
    <value>hdfs://single:9000/user/root/share</value>
    <description>oozie依賴包路徑</description>
</property>

注:oozie-site.xml中libpath配置必須與fs路徑一致。

 

(6)創建oozie數據庫

ooziedb.sh create -sqlfile oozie.sql -run

執行成功後,如圖:

 

可能出現問題二:

java.lang.Exception: Could not connect to the database: java.sql.SQLException: Access denied for user 'oozie'@'single' (using password: YES)
    at org.apache.oozie.tools.OozieDBCLI.validateConnection(OozieDBCLI.java:927)
    at org.apache.oozie.tools.OozieDBCLI.createDB(OozieDBCLI.java:192)
    at org.apache.oozie.tools.OozieDBCLI.run(OozieDBCLI.java:135)
    at org.apache.oozie.tools.OozieDBCLI.main(OozieDBCLI.java:83)
Caused by: java.sql.SQLException: Access denied for user 'oozie'@'single' (using password: YES)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964)
原因是:oozie數據庫訪問權限問題。先登錄mysql數據庫,然後給root用戶訪問oozie數據庫的權限:

grant all on oozie.* to 'root'@'192.168.128.%';

 

可能問題三:

[root@single oozie_server]# ooziedb.sh create -sqlfile oozie.sql -run
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/cli/ParseException
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
    at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
    at java.lang.Class.getMethod0(Class.java:3018)
    at java.lang.Class.getMethod(Class.java:1784)
原因是Hadoop相關依賴未拷貝到libext目錄下。

 

(8)驗證測試

啓動oozie server:

第一種啓動方式:oozie-start.sh(或者oozied.sh start),該命令方式日誌記錄在logs目錄下,

第二種啓動方式:oozied.sh run,該命令方式,日誌打印在控制檯,可以直接看到錯誤。

建議首次啓動時使用第二種方式,方便查看錯誤。成功啓動後,如圖:

也可以如下查看:

oozie admin -oozie http://localhost:11000/oozie -status

如圖:

頁面方式查看:

http://single:11000/oozie

如圖:

single是安裝oozie server的機器名稱。

 

        安裝好oozie server後,下面我們在同一臺機器上安裝oozie client,事實上,按照好oozie server後,也就是安裝好了oozie server,oozie client通常在其他機器按照,方便訪問oozie server,爲了方便,我們在single再按照以下oozie client作爲演示:

client安裝

(1)解壓

oozie-client-5.2.0.tar.gz包在oozie server安裝目錄/opt/oozie下,直接解壓:

tar -zxvf /opt/oozie/oozie-client-5.2.0.tar.gz -C /opt

然後解壓後的目錄重命名:

mv oozie-client-5.2.0 oozie-client

目錄結構如圖:

bin目錄下只有一個oozie命令。

(2)配置環境變量

打開配置文件:

vi /etc/profile

內容如下: 

# oozie client
export OOZIE_CLIENT_HOME=/opt/oozie
export PATH=$PATH:$OOZIE_CLIENT_HOME/bin

配置生效:

source /etc/profile
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章