报错问题描述
ERROR : FAILED: Execution Error, return code 30041 from org.apache.hadoop.hive.ql.exec.spark.SparkTask.
[wyh@hadoop1002 spark]$ *************************************************
ERROR : FAILED: Execution Error, return code 30041 from org.apache.hadoop.hive.ql.exec.spark.SparkTask.
Failed to execute spark task, with exception ‘org.apache.hadoop.hive.ql.metadata.HiveException(Failed
to create Spark client for Spark session 2df0eb9a-15b4-4d81-aea1-24b12094bf44)’
FAILED: Execution Error, return code 30041 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Failed to
create Spark client for Spark session 2df0eb9a-15b4-4d81-aea1-24b12094bf44
原因分析
- Spark没有启动;
需在/opt/module/spark路径下输入以下内容启动spark:[wyh@hadoop1002 spark]$ ./sbin/start-all.sh
- Spark与hive的版本不一致造成的问题(这里我找到了部分spark和hive对应的版本):
- 注意:官网下载的 Hive 3.1.2 和 Spark 3.0.0 默认是不兼容的。因为 Hive3.1.2 支持的 Spark版本是2.4.5,所以需要我们重新编译Hive3.1.2版本。
编译步骤:
官网下载Hive3.1.2源码,修改pom文件中引用的Spark版本为3.0.0,如果编译通过,直接打包获取jar包。如果报错,就根据提示,修改相关方法,直到不报错,打包获取jar包。 -
内存资源不足,导致hive连接spark客户端超时。
可以选择在配置文件里增加executor内存或减少每个executor的线程数等
解决方案:
按照所需时间查看hive日志:
默认路径/tmp/${user.name}/hive.log(具体根据自己的情况路径查看)
如果它
提示timed out waiting for client connection.
详细:
Caused by: java.lang.RuntimeException:java.util.concurrent.ExecutionException:java.util.concurrent.TimeoutException:Timed out waiting for client connection.
表示hive与spark连接时间超时!
1). 将/opt/module/spark/conf/目录下spark-env.sh.template文件改成spark-env.sh,
之后添加内容:
export SPARK_DIST_CLASSPATH=$(hadoop classpath);
2). 将/opt/module/hive/conf目录下hive-site.xml修改hive和spark的连接时间
<!--Hive和Spark连接超时时间>
<property>
<name>hive.spark.client.server.connect.timeout</name>
<value>100000ms</value>
</property>
再次执行insert语句,基本可以成功!
3).或者是异常提示语句显示在与spark创建会话的过程失败,我猜想定时hive与yarn上的某项参数被我调整后变得不兼容了,这里给一下相关的配置:
# yarn配置里,表示能够申请的容器最大容量为20G
yarn.scheduler.maximum-allocation-mb = 20G
# hive配置里,Spark 执行程序最大 Java 堆栈大小
spark.executor.memory = 17G
# Spark 执行程序内存开销,这是每个执行程序进程可从 YARN 请求的额外堆外内存量。它与 spark.executor.memory 一起构成 YARN 可用来为执行程序进程创建 JVM 的总内存。
spark.yarn.executor.memoryOverhead =3090MB
解析:“yarn.scheduler.maximum-allocation-m“”参数我是做了修改的 ,之前的因为不合适,所以我将其下调为20G
源配置:
yarn.scheduler.maximum-allocation-mb = 20G
spark.executor.memory = 17G
spark.yarn.executor.memoryOverhead =3090MB
修改为:
yarn.scheduler.maximum-allocation-mb = 20G
spark.executor.memory = 13G
spark.yarn.executor.memoryOverhead =3090MB
如果结果不能立即解决可以根据实际情况进行调整
总内存 = Spark Executor内存 + Spark Executor的JVM堆内存 + Spark Executor的JVM非堆内存
其中,Spark Executor内存是Spark配置中设置的executor总内存,包括堆内存和非堆内存。因此,将JVM堆内存和非堆内存加起来即可得到JVM的总内存使用量。
4).hive 创建的 spark 配置文件
[wyh@hadoop1002 software]$ vim /opt/module/hive/conf/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
5). 确认是否创建 hdfs 存储历史日志路径
[wyh@hadoop1002 software]$ hadoop fs -mkdir /spark-history
6).确认是否上传 Spark 纯净版 jar 包
[wyh@hadoop1002 software]$ hadoop fs -mkdir /spark-jars
[wyh@hadoop1002 software]$ hadoop fs -put spark-3.0.0-bin-without-hadoop/jars/* /spark-jars
7).确认 hive-site.xml 配置文件
[wyh@hadoop1002 software]$ vim /opt/module/hive/conf/hive-site.xm
检查配置文件是否配置正确
<!--Spark依赖位置(注意:端口号8020必须和namenode的端口号一致)-->
<property>
<name>spark.yarn.jars</name>
<value>hdfs://hadoop102:8020/spark-jars/*</value>
</property>
<!--Hive执行引擎-->
<property>
<name>hive.execution.engine</name>
<value>spark</value>
</property>
8).在 hive/conf/hive-site.xml
中追加:
<!--Hive和spark连接超时时间-->
<property>
<name>hive.spark.client.connect.timeout</name>
<value>100000ms</value>
</property>
然后重新启动hive服务端,执行insert
hive (default)> insert into table student values(1,'abc');
Query ID = hadoop_20220728201636_11b37058-89dc-4050-a4bf-1dcf404bd579
Total jobs = 1
Launching Job 1 out of 1
In order to change the average load for a reducer (in bytes):
set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
set mapreduce.job.reduces=<number>
Running with YARN Application = application_1659005322171_0009
Kill Command = /datafs/module/hadoop-3.1.3/bin/yarn application -kill application_1659005322171_0009
Hive on Spark Session Web UI URL: http://hadoop104:38030
Query Hive on Spark job[0] stages: [0, 1]
Spark job[0] status = RUNNING
--------------------------------------------------------------------------------------
STAGES ATTEMPT STATUS TOTAL COMPLETED RUNNING PENDING FAILED
--------------------------------------------------------------------------------------
Stage-0 ........ 0 FINISHED 1 1 0 0 0
Stage-1 ........ 0 FINISHED 1 1 0 0 0
--------------------------------------------------------------------------------------
STAGES: 02/02 [==========================>>] 100% ELAPSED TIME: 40.06 s
--------------------------------------------------------------------------------------
Spark job[0] finished successfully in 40.06 second(s)
WARNING: Spark Job[0] Spent 16% (3986 ms / 25006 ms) of task time in GC
Loading data to table default.student
OK
col1 col2
Time taken: 127.46 seconds
hive (default)>
无异常报错,解决
说明:因为执行insert语句运行速度会很慢,所以需要耐心等待一会,如果依次执行不成功可以重新多试几次,本人亲测,重新执行几次真的会成功,好像存在概率问题,很玄乎。文章来源:https://www.toymoban.com/news/detail-785932.html
本篇文章是记录我遇到的bug,怕以后遇到忘记怎么解决,记录自己的”遇坑“之路吧文章来源地址https://www.toymoban.com/news/detail-785932.html
到了这里,关于关于hive on spark部署后insert报错Error code 30041问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!