【背景说明】
我目前搭建离线数仓,并将hive的执行引擎改成了Spark,在将ods层的数据装载到dim层,执行insert语句时报如下错误
【报错】
[42000][40000] 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 e1e64eb2-bfa8-4e3f-8e3a-d37b88a92c86
这个错误表示Hive无法为Spark会话创建Spark客户端,可能是由于Spark会话创建失败导致的。
【原因】
经过排查,发现导致该问题的原因是当队列资源达到100%后,如果短期内都没有任务空余资源释放出来提供给创建 sparksession使用,将会导致任务失败而抛出这个异常 。
【解决】
加大client连接时间间隔;
修改hive的配置文件hive-site.xml
- <!--Hive和Spark连接超时时间-->
- <property>
- <name>hive.spark.client.connect.timeout</name>
- <value>100000ms</value>
- </property>
注意注意:每次改完这个配置文件需要重启hiveserver2,我封装了这个脚本
- hi.sh stop
- hi.sh start
再重跑insert