配置hive on spark后启动报错

因为hive底层用的执行引擎是MapReduce,所以导致了运行起来非常慢,所以我们要更换执行引擎,就有了hive on spark,基于hive的基础上将执行引擎换成spark

版本:hive 3.1.2
spark3.0.0

需要配置的信息

在spark的配置文件spark-defaults.conf中

spark.master                               yarn
spark.eventLog.enabled                   true
spark.eventLog.dir                        hdfs://hadoop102:8020/spark-history
spark.executor.memory                    1g
spark.driver.memory					   1g

在hive所在的节点上配置spark的环境变量,保证hive和spark是在同一台机器上的

然后增加hive的配置信息


<property>
    <name>spark.yarn.jarsname>
    <value>hdfs://hadoop102:8020/spark-jars/*value>
property>
  

<property>
    <name>hive.execution.enginename>
    <value>sparkvalue>
property>


<property>
    <name>hive.spark.client.connect.timeoutname>
    <value>10000msvalue>
property>

这样基础的就已经配好了,下面我们来测试一下
进入hive

创建一个表

create table student(id int,name string);

插入一条语句试试

insert into student values(1,'lili');

发现运行一会后报错,报错信息:

NoClassDefError:org/apache/spark/AccumulatorParam

我们查看yarn上程序运行的log日志,看到报错信息
是在hive-exec.jar包中报的错

Exception:org/apache/hive/spark/counter/SparkCounters.createCounter()
public class SparkCounter implements Serializable {
    private String name;
    private String displayName;
    private Accumulator<Long> accumulator;
    private long accumValue;

我们可以知道应该是hive的包的问题,我们去hive官网上看,可以看到hive on spark的版本匹配表格
hive spark
1.1.x 1.2.0
1.2.x 1.3.1
2.0.x 1.5.0
2.1.x 1.6.0
2.2.x 1.6.0
2.3.x 2.0.0
3.0.x 2.3.0
master 2.3.0

我们看到基于hive3.X版本官方只测试了基于spark2.3.0版本的,所以我们用hive3.1.2版本会先去找spark2.3.0版本的类,但是我们又没有,所以报错

解决方法:下载hive3.1.2版本的源码,将hive依赖的spark包指向spark3.0.0然后重新编译打包,然后重新安装hive并且配置好之后运行就没有问题了

对于版本不匹配的问题的都可以尝试按照这个方法去查找一下问题

你可能感兴趣的:(可能遇到的问题及解决方案,spark,hive)