生产报错和代码报错合集

场景1 Driver对结果集的限制

Job aborted due to stage failure: Total size of serialized results of 17509 tasks (2.0 GiB) is bigger than spark.driver.maxResultSize (2.0 GiB)

报错关键字:

is bigger than spark.driver.maxResultSize

相关参数:

– conf spark.driver.maxResultSize=3g

解析:

spark.driver.maxResultSize是Spark的一个配置参数,用于限制Driver程序接收的结果的最大尺寸。在Spark中,Driver程序负责协调整个作业的执行,并且通常在执行完一个作业后会将结果返回给客户端。如果结果的尺寸超过了spark.driver.maxResultSize所设置的值,Driver程序会抛出一个SparkException,防止因为结果过大而导致Driver程序内存溢出。
该参数的默认值为1g,表示结果的最大尺寸为1GB。可以根据实际情况来调整该值,比如如果结果较大,可以增大spark.driver.maxResultSize的值,以便接收更大的结果。

场景2 OOM(常见)

Caused by: org.apache.spark.memory.SparkOutOfMemoryError: Unable to acquire 65536 bytes of memory, got 0

报错关键字:

SparkOutOfMemoryError

相关参数:

set spark.yarn.driver.memory=16g;
set spark.executor.memory=8g;

解析:

​ 代码逻辑或者任务参数设置不合理,数据倾斜,要分清楚是driveroom还是executoroom

​ 数据量过大:作业处理的数据量超过了可用内存的限制。这可能是因为数据集过大,或者数据被分区不均匀,导致某些分区的数据量过大。

​ 算子计算需求过高:作业中使用的算子需要大量的内存来执行计算。例如,使用collect()操作将整个数据集返回到Driver程序,可能会导致内存溢出,另外如果有shuffle的算子,也需要注意.

​ 配置参数不合理:Spark的配置参数(如executor内存、driver内存、堆外内存等)设置不合理,导致内存不足以支持作业的执行。 解决SparkOutOfMemoryError的方法可以有以下几种:

​ 增加可用内存:可以增加Executor节点的内存,或者调整Driver程序的内存配置,以提供更多的可用内存。

​ 优化数据分区:可以尝试重新分区数据,使得每个分区的数据量更均匀,避免某些分区过大导致内存溢出。

​ 优化算子计算:可以尝试使用更高效的算子或者算法来减少内存使用量,避免将整个数据集返回到Driver程序。

​ 调整配置参数:根据具体情况调整Spark的配置参数,例如增大spark.driver.memoryspark.executor.memory等参数来提供更多的内存空间。

​ 优化代码逻辑 : 代码中是否出现五个以上的join嵌套,出现多层临时表,这个比较常见.

​ 广播 : 代码中是否广播了过大的表. 合理设置spark.sql.adaptiveBroadcastJoinThreshold

​ 容器配比不合理: 提交的任务参数或者任务,VC:内存应该至少为1:4,一个executor上的所有core共用配置的executor内存,如果有类似2core4G等情况存在,在数据量较大的情况下易OOM,至少应是1core4G或者2core8G等,我们集群现在是4c10g,急需提高内存,或者减少核心达到合适的配比.

特殊情况: 在Spark中,“off-heap”(堆外内存)是指分配给Spark应用程序的内存空间,而不是JVM堆内存。默认情况下,Spark应用程序使用的是堆内存,但可以通过配置参数将一部分内存分配给堆外内存。
将堆外内存分配调大的主要原因是为了减少垃圾回收(GC)对应用程序性能的影响。在大规模的数据处理或计算任务中,如果数据量很大且内存不足时,JVM的GC会频繁触发,导致系统停顿时间增加,从而降低了作业的整体性能。通过将一部分内存分配给堆外内存,可以减少GC的频率和停顿时间,从而提高Spark应用程序的执行效率。堆外内存的分配不受JVM的垃圾回收机制管理,因此可以避免垃圾回收对内存的频繁扫描和整理,减少了GC的负担。值得注意的是,将堆外内存调大并不能解决所有的内存问题。如果数据量过大或计算需求过高,即使堆外内存调大也可能导致内存溢出。因此,在调整堆外内存时需要综合考虑数据量、计算需求、可用内存等因素,确保分配合理的内存资源。所以i需

场景3 JVM内存问题

An error report file with more information is saved as:

[2020-08-14 07:00:49]=[stdout]# /bankapp/tomcat7/bin/hs_err_pid94510.log
here is insufficient memory for the Java Runtime Environment to continue.

2020-08-14 07:00:49):stdout]# Native memory allocation (mmap) failed to map 65536 bytes for committing reserved memory.

报错关键字:

Native memory allocation (mmap) failed to map 65536 bytes for committing reserved memory

相关参数:

–confsparkdriver.memory=20g (增加spark driver内存)

解析:

​ 说明错误出现在driver,因为excutor的日志都是在yam container中,都会打印在spark webui中.

​ 表示无法为保留内存映射(mmap)分配65536字节的内存。这个错误通常发生在操作系统无法为Java进程分配足够的内存时

场景4 Driver堆栈问题

java.lang.StackOverflowError

报错关键字:

java.lang.StackOverflowError

解析:

栈溢出,driver默认栈大小为1M,driver会去解析语法树和sql执行计划,字段过多,或者大量引用操作会占据大量栈空间,所以需要增加配置

相关参数:

spark-submit --conf “spark.executor.extraJavaOptions=-Xss4m” --conf “spark.driver.extraJavaOptions=-Xss4m” …

场景5 Yarn提交问题

ERROR yarn.ApplicationMaster: Promise already completed

解析: 重复提交了application

ERROR yarn.ApplicationMaster: Uncaught exception:
java.util.concurrent.TimeoutException: Futures timed out after [100000 milliseconds]

解析:mysql服务未正常工作

ERROR yamApplicationMaster: Uncaught exception:
org.apache.hadoop.yarn.exceptions.nvalidResourceRequestFxception: nvalid resource request. requested yintual cores<0,ofrequested virtual cores>max configured requestedvirtualCores-16, maxVirtualCores=15

解析: 提交申请的executor超过了最大的15核

场景6 笛卡尔积

Exception in thread “main” org.apache.spark.sql.AnalysisException: Detected cartesian product for LEFT OUTER join between logical plans

解析:

因为出现了笛卡尔积,首先尽量优化sql,不要让他出现笛卡尔积,笛卡尔积会非常耗费计算资源。

场景7 广播失败

Caused by:org .apache.spark.SparkException: Job aborted due to stage falure: Task o in stage2.0 filed times most recant taluie Lost lask 0.s istage 20 TiD 5, chd0Sshigdata pab.con.cn. xecutor 1): org.apache:spark SparkException: Kryo serialization failed: Bufer overflow.Available:0,require: 1925879 acid this ncreasespark kryoserializer,buttemax alue

解析:

广播失败,缓冲区异常,删除广播的参数

相关参数:

spark.sql.autoBroadcastJoinThreshold

场景8 Driver内存

caused by :java.lang.outOfmemoryerror: GC overhead limit exceeded

org.apache.spark.sparkException: job aborted

解析:

作业需要的driver内存过大,设置的过小,需要增大

相关参数:

从犯spar.driver.memory=16g

场景9 Oracle错误

Caused by: java.io.IOException: Couldn’t read data - ORA-01555: snapshot too old: rollback segment number 2270 with name “_SYSSMU2270_219954366$” too small

关键词:

snapshot too old

解析:

快照过久错误, 读写的时候ora原表在发生变化或者差距太多

其他

[0918 14:19:41,097] java.lang.IllegalArgumentException: read path not exists /user/hive/ods/tmp_zwj.sql

解析:sql没找到

[1021 18:35:55,659] java.sql.SQLException: Error while processing statement: FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Spark job failed due to task failures: Job aborted due to stage failure: Task 25 in stage 1.0 failed 4 times, most recent failure: Lost task 25.3 in stage 1.0 (TID 10, abc-dxp-worker-apc06, executor 3): UnknownReason
Driver stacktrace:

解析:

code3报错一般是sql执行器报错,执行过程中失败次数过多或丢失,请重试,或者深究原因

[1021 19:09:15,220] java.sql.SQLException: Error while processing statement: FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Spark job failed due to: Job aborted due to stage failure: Aborting TaskSet 1.0 because task 19 (partition 19) cannot run anywhere due to node and executor blacklist. Most recent failure: Lost task 19.0 in stage 1.0 (TID 4, prod-dmp-worker-ap10, executor 1): UnknownReason

Blacklisting behavior can be configured via spark.blacklist.*.

解析:

由于被列入了节点和执行器黑名单。
最近的失败原因是任务19.0在第1.0阶段中丢失,具体原因是未知的。这可能是由于任务执行过程中出现了意外错误,导致任务无法继续执行。
关于黑名单的行为可以通过spark.blacklist.*来进行配置,这可能影响任务在集群中的调度和执行。

[1021 19:17:59,311] java.sql.SQLException: Error while processing statement: FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Spark job failed due to task failures: Job aborted due to stage failure: Task 25 in stage 1.0 failed 4 times, most recent failure: Lost task 25.3 in stage 1.0 (TID 35, sjzt-worker13, executor 3): UnknownReason
Driver stacktrace:

解析:

由于任务执行过程中出现了未知的错误或异常,导致任务无法继续执行。
根据提供的信息,无法确定问题的具体原因,可能需要进一步的调试和分析来解决该问题。可以尝试检查集群的配置和资源分配情况,以及调查任务执行过程中的其他错误或异常。另外,查看Driver stacktrace可能提供了更多的调试信息

SQL 错误 [3] [42000]: Error while processing statement: FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Spark job failed due to: For input string: “64m” 这个参数是什么意思

解析:

在Spark中,"64m"是一个用于配置JVM内存大小的参数。根据错误信息和上下文,这个参数可能是在Spark SQL中的某个配置项中被使用,并且解析过程中发生了错误。
通常情况下,Spark SQL使用spark.executor.memory来设置Executor的内存大小。该参数的值应该是一个带有单位的内存大小,可用的单位有"m"表示兆字节(MB),"g"表示千兆字节(GB)等。
在给定的错误信息中,"64m"被解析为一个字符串,并尝试将其转换为合适的内存大小时出现了错误。
为了解决这个错误,你可以检查你的Spark SQL配置文件或代码中是否存在类似于spark.executor.memory的配置项,并确保为其提供正确的值,例如使用"64m"来指定64兆字节的内存大小。
另外,还要确保在配置时使用了正确的单位,例如使用"512m"代表512兆字节的内存大小,而不是使用"512MB"或其他单位。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值