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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章