【hive on spark Error】return code 30041 from org.apache.hadoop.hive.ql.exec.spark.SparkTask.

ERROR : FAILED: Execution Error, return code 30041 from org.apache.hadoop.hive.ql.exec.spark.SparkTask.

前言

在成功消除Cloudare管理界面上那些可恶的警告之后,我又对yarn的一些参数进行调优,最后重启了集群。当我提个任务(spark on yarn)并且看到并发及资源的分配情况正如自己先前所料的时候,我长舒了一口气,端起杯子拿上手机起身打算去接杯水消遣一下。
然而我一杯温水接完凑在嘴边,眼睛扫了一下手机刚打算痛饮一番的时候,同事在群里惊呼报错的消息就传来了:
在这里插入图片描述
当场惊的我一口靓汤来不及咽下,端着杯子一路洒水慌忙跑去问同事发生了什么事。
据了解,是调度上的一些原本正常的hive sql调度跑批任务(报错的均是将计算引擎设置为spark,即hive.execution.engine=spark)统统报错了。深吸一口气我故作镇定,默默返回到工位上,沉思究竟是出了什么幺蛾子。
我前思后想,总觉得是之前改动的一些配置造成了冲突,才致使任务提交异常。为了验证想法,我又要来了部分调度代码在hue上开始测试,而测试结果果如我想象那般,点击运行便报错。

报错信息

ERROR : FAILED: Execution Error, return code 30041 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Failed to create Spark client for Spark session 8349c773-83f3-4c6c-a6d4-9f778326d559: java.lang.RuntimeException: spark-submit process failed with exit code 1 and error ?
INFO  : Completed executing command(queryId=hive_20191107111429_3da1dbee-c22d-4a9a-ae26-3536a7011ce6); Time taken: 2.542 seconds

异常分析

异常提示语句显示在与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“”参数我是做了修改的,因为之前的设置明显不合理(之前的设置为225G,估计是与“yarn.nodemanager.resource.memory-mb”容器大小配置放一起搞混了),所以我将其下调为20G,这其实对于千兆网卡的机器来说还是大了。
本次报错就是因为对“yarn.scheduler.maximum-allocation-m“”参数的调整上,观察可知“spark.executor.memory”和“spark.yarn.executor.memoryOverhead”这两项设置基本上确定了hive on spark模式下的任务可向yarn获取的JVM空间上限大小,在我将“yarn.scheduler.maximum-allocation-m“”参数参赛调整为20G后,就出了冲突。
那么这时候就有两种解决方案,一种是加大“yarn.scheduler.maximum-allocation-m“”参数,另一种是调整“spark.executor.memory”,我选择了后者,将“spark.executor.memory”设置为13G,成功解决了问题。

配置改动

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

若不能立竿见影,那么可再带入本案例分析过程,根据实际情况进行调整。

后记

对于hive on spark 任务的jvm换算成执行内存的总大小多少我没来得及深究,有想法的朋友可以在留言区交流。

发布了31 篇原创文章 · 获赞 21 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Jack_Roy/article/details/102961473