目录
版本和系统要求
maven安装
下载
解压
配置环境变量
测试安装
Pig安装
下载
解压
配置
验证
oozie安装
下载源码包
解压源码包
源码编译
server安装
client安装
原文链接
本文安装oozie版本:oozie-5.2.0.tar.gz
oozie官网安装系统要求:
下载地址: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前需要先安装好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-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= - 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= - default 0.16.0
-Dpig.classifier= - default h2
-Dsqoop.version= - default 1.4.7
-Dsqoop.classifier= - default hadoop260
-Djetty.version= - default 9.3.20.v20170531
-Dopenjpa.version= - default 2.2.2
-Dxerces.version= - default 2.10.0
-Dcurator.version= - default 2.5.0
-Dhive.version= - default 1.2.2
-Dhbase.version= - default 1.2.3
-Dtez.version= - default 0.8.4
在
最后编译成功后如图:
图中显示时长是02:44,笔者认为不科学。编译成功后,我们需要的包在distro/target/oozie-5.2.0-distro.tar.gz。
oozie的安装分为server和client安装。下面先按照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添加如下配置:
hadoop.proxyuser.root.hosts
*
hadoop.proxyuser.root.groups
*
注:配置core-site.xml后,需要重启Hadoop。这里hadoop.proxyuser.[ ].hosts和hadoop.proxyuser.[ ].groups配置的是root,根据具体情况配置。
oozie-site.xml添加如下配置:
oozie.service.JPAService.jdbc.driver
com.mysql.jdbc.Driver
oozie.service.JPAService.jdbc.url
jdbc:mysql://192.168.128.1:3306/oozie?createDatabaseIfNotExist=true&useSSL=false
oozie元数据存储数据库名称
oozie.service.JPAService.create.db.schema
true
自动创建oozie数据库
oozie.service.JPAService.jdbc.username
root
oozie.service.JPAService.jdbc.password
root
oozie.service.HadoopAccessorService.hadoop.configurations
*=/opt/hadoop/etc/hadoop
oozie.service.WorkflowAppService.system.libpath
hdfs://single:9000/user/root/share/lib
oozie依赖包路径
配置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中配置的:
注: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作为演示:
(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