Failed to create Spark client for Spark session

最近在hive里将mr换成spark引擎后,执行插入和一些复杂的hql会触发下面的异常:apache

org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: SemanticException Failed to get a spark session: org.apache.hadoop.hive.ql.metadata.HiveException: Failed to create Spark client for Spark session c5924990-6187-4a15-a760-ec3b1afbc199

 

未能建立spark客户端的缘由有这几个:vim

1,spark没有打卡微信

2,spark和hive版本不匹配网络

3,hive链接spark客户端时长太短session

 

解决方案:maven

1,在进入hive以前,须要依次启动hadoop,spark,hiveservice,这样才能确保hive在启动spark引擎时能成功ide

spark启动:oop

cd /opt/spark
./sbin/start-all.sh

 

2,版本问题是最多见也是出现最多的问题,我用的版本依次为hadoop3.3.0,hive3.1.2,spark2.4.7,以前测试过spark3.0.1,发现和hive不兼容测试

这里还须要注意Apache官网的提供了如图所示的几个spark包版本:ui

 

但在集成hive时spark自己不能自带hive配置,因此只有第三个是能够用的,可是我测试了一下在个人电脑上仍是报错,因此我选择了本身编译,下载最后一个源码包,解压后进入spark目录

输入命令:

./dev/make-distribution.sh --name without-hive --tgz -Pyarn -Phadoop-3.3 -Dhadoop.version=3.3.0 -Pparquet-provided -Porc-provided -Phadoop-provided

可是发现编译卡住了,原来编译会自动下载maven,scala,zinc,存放在build目录下,如图:

 

 因为下载过于缓慢,这里直接将这三个包放在build目录下,解压好,编译时会自动识别,能够省去不少时间,快速进入编译,须要压缩包的能够关注公众号:Tspeaker97  给我发消息找我要

编译过程比较慢,我花了30分钟才将spark编译好,中间还网络断流卡住失败了一次,若是不能访问外网的,建议将maven镜像改成阿里云。

 

 

编译完成后在spark目录下就能够看到编译出的tgz包,解压到对应目录:

vim spark-env.sh
插入以下代码:
export SPARK_DIST_CLASSPATH=$(hadoop classpath)

 

接下来就是hive的设置,这里我用的是公司编译好的版本,大小比Apache官网大一点,想要能够微信扣我

进入hive/conf目录:

vim spark-defaults.conf
插入以下代码:
spark.master                             yarn
spark.eventLog.enabled                   true
spark.eventLog.dir                       hdfs://hadoop01:9820/spark-history
spark.executor.memory                    2g

 

在hdfs建立对应目录并拷贝jar包:

hadoop fs -mkdir /spark-history
hadoop fs -mkdir /spark-jars
hadoop fs -put /opt/spark/jars/* /spark-jars

 

在hive/conf/hive-site.xml中增长:(这里特意延长了hive和spark链接的时间,能够有效避免超时报错)

<!--Spark依赖位置-->
<property>
    <name>spark.yarn.jars</name>
    <value>hdfs://hadoop01:9820/spark-jars/*</value>
</property>
  
<!--Hive执行引擎-->
<property>
    <name>hive.execution.engine</name>
    <value>spark</value>
</property>

<!--Hive和spark链接超时时间-->
<property>
    <name>hive.spark.client.connect.timeout</name>
    <value>100000ms</value>
</property>

 

 而后启动spark服务,hive服务,并进入hive客户端,执行hql:

set hive.exec.mode.local.auto=true;

create table visit(user_id string,shop string) row format delimited fields terminated by '\t';

load data local inpath '/opt/hive/datas/user_id' into table visit;

SELECT t1.shop,
       t1.user_id,
       t1.count,
       t1.rank
FROM
  (SELECT shop,
          user_id,
          count(user_id) COUNT,
          rank() over(partition BY shop ORDER BY count(user_id) DESC) rank
   FROM visit
   GROUP BY user_id,
            shop
   ORDER BY shop ASC, COUNT DESC ) t1
WHERE rank <4;

 

spark引擎成功启动:

 

 

若是有其余问题,欢迎叨扰:

相关文章
相关标签/搜索