首先,如果想要在hive 3.1.3上使用spark 3.0.0,不可避免地要重新编译hive

如果只是配置了hive-site.xml和spark-defaults.conf,那么在插入测试的时候会报如下错误:

FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Spark job failed during runtime. Please check stacktrace for the root cause.

spark hive实战 hive3 spark_spark

1. 下载hive源码包

把hive 3.1.3 的源码包下载到本地,目的是可以用intellij打开,方便修改相关源码。

hive源码包

spark hive实战 hive3 spark_spark_02

2. 解压并用idea打开,改写源码

解压后,文件夹内有一个同名文件夹apache-hive-3.1.3-src,用intellij打开。

spark hive实战 hive3 spark_maven_03

修改内容参考链接:修改内容 具体需要修改的部分如下

spark hive实战 hive3 spark_hive_04

以上圈起来的部分,一个个点进去照着改。怕有的人看不懂,以下图为例:

spark hive实战 hive3 spark_spark_05


最上面表示文件名,直接从intellij找到相关文件修改即可。绿色部分表示要添加的内容,红色部分表示要删除的内容。

修改完毕后,重新打包成 .tar.gz 的格式。

如果你不想自己动手,没关系,我提供了修改好的源码包,里面还有不带hadoop的纯净spark。为啥没有maven编译好的jar包呢,因为租的服务器带宽太垃了,下到本地要半年。
链接:https://pan.baidu.com/s/1FCOJp29P56xZ8RMUYD9A3w 提取码:jjc6

3. 上传压缩包至服务器并maven编译

上传至服务器,例如我上传至 /opt/software/。
在下一步操作前,要先自行安装好maven,没安装的请自行百度。

cd $MAVEN_HOME/conf/
vim settings.xml

settings.xml 中,添加以下镜像:

<mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
    </mirror>
<mirror>
    <id>aliyunmaven</id>
    <mirrorOf>*</mirrorOf>
    <name>spring-plugin</name>
    <url>https://maven.aliyun.com/repository/spring-plugin</url>
 </mirror>

 <mirror>
    <id>repo2</id>
    <name>Mirror from Maven Repo2</name>
    <url>https://repo.spring.io/plugins-release/</url>
    <mirrorOf>central</mirrorOf>
 </mirror>

进入刚刚压缩包上传的路径,解压压缩包:

cd /opt/software/

# 解压
tar -zxvf apache-hive-3.1.3-src.tar.gz

# 进入目录
cd apache-hive-3.1.3-src/

# 使用Maven进行编译打包
mvn clean package -Pdist -DskipTests -Dmaven.javadoc.skip=true

打包需要一段时间,完成后,进入到 cd packaging/target/ 文件夹,看到有一个编译好的包:

spark hive实战 hive3 spark_spark_06

4. 改造原有hive环境

由于我之前是安装过hive的,此时需要先把旧的hive重命名,比如mv hive hive_old 然后解压我们编译好的包 tar -zxvf apache-hive-3.1.3-bin.tar.gz -C /opt/module/ 这里我把解压出来的文件夹重命名成hive。

# 拷贝原先的 hive-site.xml 和 spark-defaults.conf
cp hive_old/conf/hive-site.xml hive/conf/
cp hive_old/conf/spark-defaults.conf hive/conf/

# 拷贝lib下的 mysql jar包,没有的可以自行下载,我上面的链接也有提供
cp hive_old/lib/mysql-connector-java-5.1.37-bin.jar hive/lib/

5. 上传纯净spark jar包至集群

需要spark-3.0.0-bin-without-hadoop.tgz,可以自行下载,也可以从我的链接里下

# 解压
tar -zxvf spark-3.0.0-bin-without-hadoop.tgz

# 创建目录
hadoop fs -mkdir /spark-jars

# 上传至集群
hadoop fs -put spark-3.0.0-bin-without-hadoop/jars/* /spark-jars

6. 启动集群并测试

分别启动 hadoop, metastore, hiveserver2
然后用 bin/hive 启动hive测试一下

create table student(id int, name string);
insert into table student values(1,'abc');

如果出现以下内容,表示 hive 3.1.3 on spark 3.0.0 部署成功了

spark hive实战 hive3 spark_spark_07

如果本文对你有帮助,请点个赞支持一下~~