编译说明
使用Hive官方提供的预编译安装包是最常见和推荐的方式来使用Hive,适用于大多数用户。这些预编译的安装包经过了测试和验证,在许多不同的环境中都能正常运行。
在某些特定情况下,可能需要从源代码编译Hive,而不是使用预编译的安装包。
编译Hive源代码的场景、原因如下:
1.定制配置:
如果希望对Hive进行一些特定的配置定制或修改,例如更改默认的参数设置、添加新的数据存储后端、集成新的执行引擎等,那么编译源代码将能够修改和定制 Hive 的配置。
2.功能扩展:
如果需要扩展Hive的功能,例如添加自定义的 UDF(用户定义函数)、UDAF(用户定义聚合函数)、UDTF(用户定义表生成函数)等,编译源代码将添加和构建这些自定义功能。
3.调试和修改 Bug:
如果在使用Hive过程中遇到了问题,或者发现了bug,并希望进行调试和修复,那么编译源代码将能够获得运行时的源代码,进而进行调试和修改。
4.最新特性和改进:
如果希望使用Hive的最新特性、改进和优化,但这些特性尚未发布到官方的预编译包中,可以从源代码编译最新的版本,以获得并使用这些功能。
5.参与社区贡献:
如果对Hive有兴趣并希望为其开发做贡献,通过编译源代码,可以获取到完整的开发环境,包括构建工具、测试框架和源代码,以便与Hive社区一起开发和贡献代码。
编译Hive3.1.3
当使用Spark作为Hive的执行引擎时,但是Hive3.1.3本身支持的Spark版本是2.3,故此需要重新编译Hive,让Hive支持较新版本的Spark。计划编译Hive支持Spark3.4.0,Hadoop版本3.1.3
更改Maven配置
更改maven的settings.xml文件,看情况决定是否添加如下仓库地址,仅供参考:
<!-- 阿里云仓库 -->
<mirror>
<id>aliyun-central</id>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/central</url>
<mirrorOf>*</mirrorOf>
</mirror>
<!-- 中央仓库 -->
<mirror>
<id>repo</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>https://repo.maven.apache.org/maven2</url>
</mirror>
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
下载源码
下载需要编译的Hive版本源码,这里打算重新编译Hive3.1.3
wget https://archive.apache.org/dist/hive/hive-3.1.3/pache-hive-3.1.3-src.tar.gz
1.
IDEA打开pache-hive-3.1.3-src项目,打开项目后肯定会各种爆红,不用管
修改项目pom.xml
1.修改Hadoop版本
Hive3.1.3支持的Hadoop版本是3.1.10,但是Hive与Hadoop之间记得有个范围支持,故与Hadoop相关的操作看需求是否更改
<hadoop.version>3.1.0</hadoop.version>
<hadoop.version>3.1.3</hadoop.version>
1.
2.
3.
清楚的记得Hadoop3.1.3使用日志版本是1.7.25
<slf4j.version>1.7.10</slf4j.version>
<slf4j.version>1.7.25</slf4j.version>
1.
2.
3.
2.修改guava版本
由于Hive运行时会加载Hadoop依赖,因此需要修改Hive中guava版本为Hadoop中的guava版本。这里即使不更改,实则在使用Hive时也可能会进行更换guava版本操作(版本差异不大可以不用更换)
<guava.version>19.0</guava.version>
<guava.version>27.0-jre</guava.version>
1.
2.
3.
3.修改spark版本
Hive3.1.3默认支持的Spark是2.3.0,这步也是核心,使其支持Spark3.4.0,使用版本较新,看需求适当降低。另外,明确指定Spark3.4.0使用的是Scala2.13版本,一同修改
<spark.version>2.3.0</spark.version>
<scala.binary.version>2.11</scala.binary.version>
<scala.version>2.11.8</scala.version>
# 原计划编译spark3.4.0 特么的太多坑了 后面不得不放弃
<spark.version>3.4.0</spark.version>
<scala.binary.version>2.12</scala.binary.version>
<scala.version>2.12.17</scala.version>
# 掉坑里折腾惨了,降低spark版本
<spark.version>3.2.4</spark.version>
<scala.binary.version>2.12</scala.binary.version>
<scala.version>2.12.17</scala.version>
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
修改hive源码
修改说明
修改Hive源代码,会对其进行删除、修改、新增操作,下图是Git版本控制对比图,大家应该都能看懂吧。但还是说明一下:-:删除该行代码 +:新增、修改该行代码
修改hive源码这个操作是核心操作,具体修改哪些源代码,参考:https://github.com/gitlbo/hive/commits/3.1.2
修改standalone-metastore模块
具体修改参考:https://github.com/gitlbo/hive/commit/c073e71ef43699b7aa68cad7c69a2e8f487089fd
创建ColumnsStatsUtils类
-