首先,如果想要在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.
1. 下载hive源码包
把hive 3.1.3 的源码包下载到本地,目的是可以用intellij打开,方便修改相关源码。
2. 解压并用idea打开,改写源码
解压后,文件夹内有一个同名文件夹apache-hive-3.1.3-src,用intellij打开。
修改内容参考链接:修改内容 具体需要修改的部分如下
以上圈起来的部分,一个个点进去照着改。怕有的人看不懂,以下图为例:
最上面表示文件名,直接从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/
文件夹,看到有一个编译好的包:
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 部署成功了
如果本文对你有帮助,请点个赞支持一下~~