1 编译环境准备
1.1 虚拟机准备
准备一台虚拟机,安装CentOS7.5系统(带图形化操作界面)
1.2 安装JDK
步骤1:卸载现有的JDK
sudo rpm -qa | grep -i java | xargs -n1 sudo rmp -e --nodeps
步骤2:上传JDK安装包,并解压到/opt/module/路径
[atguigu@hadoop100 software]tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
步骤3:配置JDK环境变量
# (1)新建/etc/profile.d/my_env.sh文件
[atguigu@hadoop100 module] sudo vim /etc/profile.d/my_env.sh
# (2)添加JDK环境变量
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
# (3)让环境变量生效
[atguigu@hadoop100 software]$ source /etc/profile.d/my_env.sh
步骤4:测试JDK是否安装成功
[atguigu@hadoop100 module]# java -version
1.3 安装Maven
步骤1:上传maven安装包,并解压到/opt/module/路径
[atguigu@hadoop100 software]$ tar -zxvf apache-maven-3.6.3-bin.tar.gz -C /opt/module/
步骤2:配置Maven环境变量
# 1. 编辑/etc/profile.d/my_env.sh文件
[atguigu@hadoop100 module]$ sudo vim /etc/profile.d/my_env.sh
# 2 添加内容:
# MAVEN_HOME
export MAVEN_HOME=/opt/module/apache-maven-3.6.3
export PATH=$PATH:$MAVEN_HOME/bin
# 3 让环境变量生效
[atguigu@hadoop100 software]$ source /etc/profile.d/my_env.sh
步骤3:检查maven是否安装成功
[atguigu@hadoop100 module]$ mvn -version
步骤4:配置仓库镜像
修改Maven配置文件
[codejiwei@centos1 module]$ vim /opt/module/apache-maven-3.6.3/conf/settings.xml
在 节点中增加以下内容
<!-- 阿里云仓库 -->
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<!-- <url>https://repo1.maven.org/maven2/</url> -->
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
1.4 安装IDEA
步骤1:上传IDEA安装包,解压到/opt/module/路径
[atguigu@hadoop100 software]$ tar -zxvf ideaIU-2020.3.1.tar.gz -C /opt/module/
步骤2:启动IDEA(有图形化界面启动)
# 打开一个终端
[atguigu@hadoop100 ~]$ nohup /opt/module/idea-IU-203.6682.168/bin/idea.sh >/dev/null 2>&1 &
步骤3:配置Maven
2 编译Hive源码
在Hive官网或者Github下载所需版本源码,并将其导入IDEA。
https://downloads.apache.org/hive/
2.1 测试编译环境
步骤1:上传源码tar包,解压到/opt/module/路径
tar -zxvf apache-hive-3.1.2-src.tar.gz -C /opt/module/
步骤2:将源码导入IDEA,并等待下载依赖
下载完依赖后,pom文件会报很多处错误,这个不能决定是否是错误。需要使用官方提供的编译打包方式去检验才行。
步骤3:在修改依赖和代码之前,测试一下打包是否正常,用来检验编译环境是否正常
打开terminal终端,执行官方打包命令:
https://cwiki.apache.org/confluence/display/Hive/GettingStarted#GettingStarted-BuildingHivefromSource
mvn clean package -Pdist -DskipTests -Dmaven.javadoc.skip=true
打包成功标志:
编译好的tar包在/opt/module/apache-hive-3.1.2-src/packaging/target路径下
2.2 统一Hive与Hadoop的guava依赖版本
集群中所安装的Hadoop-3.1.3中和Hive-3.1.2中包含guava的依赖,Hadoop-3.1.3中的版本为guava-27.0-jre,而Hive-3.1.2中的版本为guava-19.0。由于Hive运行时会加载Hadoop依赖,故会出现依赖冲突的问题。
步骤1:修改Hive项目中pom.xml文件,将guava依赖的版本改为27.0-jre
将
<guava.version>19.0</guava.version>
更改为:
<guava.version>27.0-jre</guava.version>
步骤2:重复执行打包命令,根据错误提示修改源码。
mvn clean package -Pdist -DskipTests -Dmaven.javadoc.skip=true
步骤3:重复执行步骤2,直至打包成功。
注:休要修改的位置参考:https://github.com/gitlbo/hive/commits/3.1.2
2.3 适配Spark3.0.0
Hive-3.1.2默认依赖的Spark版本为2.3.0,与集群中安装的Spark3.0.0存在兼容性问题。
步骤1:修改Hive项目的pom.xml文件,将spark依赖的版本改为3.0.0
将
<spark.version>2.3.0</spark.version>
改为:
<spark.version>3.0.0</spark.version>
步骤2:重新执行打包命令,根据错误提示修改源码
步骤3:重复执行步骤2,直至打包成功
注:需要修改的位置参考:https://github.com/gitlbo/hive/commits/3.1.2
2.4 修复Hive-19316问题
Hive3.1.2的release版本中存在https://issues.apache.org/jira/browse/HIVE-19316中所描述的问题,会影响到往表中插入数据。该问题题已在3.2.0版本中之后被解决了,但是Hive-3.1.2中仍然存在该问题。
需要修改的位置参考:
https://github.com/apache/hive/pull/378/commits/4e0686fcb7b9e4988156bfd9682ad3b96ae044b2
或者
https://github.com/gitlbo/hive/commits/3.1.2
3 测试编译好的源码
3.1 获取编译好的安装包
待上述问题全部解决完毕,重新打包
mvn clean package -Pdist -DskipTests -Dmaven.javadoc.skip=true
编译好的安装包位于/opt/software/apache-hive-3.1.2-src/packaging/target路径下,下图中的apache-hive-3.1.2-bin.tar.gz即为编译好的安装包。
3.2 测试
1)将编译完成的安装包上传到集群
2)将集群中已部署的Hive做好备份工作
3)解压新的安装包到原来的路径
4)将原来部署的Hive中的配置文件放入新的Hive中
[atguigu@hadoop102 hive]$ cp /opt/module/hive_bak/conf/hive-site.xml conf/
[atguigu@hadoop102 hive]$ cp /opt/module/hive_bak/conf/spark-defaults.conf conf/
5)向新部署的Hive的lib目录下添加mysql驱动
[atguigu@hadoop102 hive]$ cp /opt/module/hive_bak/lib/mysql-connector-java-5.1.48.jar lib/
6)启动Hive客户端,测试