6 个回答
本身的Executor 内存不足,或未设置合理的 YARN Container 内存。
解决办法:
解决办法:
1、增加 Executor 内存(调整 spark.executor.memory)。
2、如果运行在 YARN 上,增加 Container 的非堆内存(通过 spark.executor.memoryOverhead 配置)。
发布于:3周前 (01-22) IP属地:四川省
并行度过高,导致每个任务处理数据量过大,或分配了过多任务争抢有限内存资源。
解决办法:
解决办法:
1、结合数据量合理设置并行度(spark.default.parallelism)。
2、通过 spark.sql.shuffle.partitions 优化 Spark SQL 的分区数。
发布于:3周前 (01-22) IP属地:四川省
使用 cache() 或 persist() 缓存大量 RDD/Dataset,超出了内存限制。
解决办法:
解决办法:
1、合理规划缓存的数据量,避免频繁缓存大的数据集。
2、调整内存模型参数:增大 spark.memory.storageFraction 或整体调高 spark.memory.fraction。
发布于:3周前 (01-22) IP属地:四川省
查询数据量过大,尤其是一些需要提前使用条件过滤不必要数据的场景。
解决办法:
解决办法:
1、前置过滤条件,减少查询数据量。
2、查询时尽量只读取必要列(避免 SELECT *)。
发布于:3周前 (01-22) IP属地:四川省
使用广播变量时候,如果变量过大,可能导致 Driver 内存溢出。
解决办法:
解决办法:
1、增加 Driver 内存(通过 spark.driver.memory 或 --driver-memory 指定)。
2、减小广播变量的大小(调整 spark.sql.autoBroadcastJoinThreshold)。
发布于:3周前 (01-22) IP属地:四川省
调用如 collect()、take() 等API时,会将数据从所有 Executor 汇集到 Driver。如果返回的数据量超过 Driver 内存,就会导致 OOM。
解决办法:
解决办法:
1、增加 Driver 内存(通过 spark.driver.memory 或 --driver-memory 指定)。
2、设置 spark.driver.maxResultSize 限制返回结果大小(默认 1GB)。
发布于:3周前 (01-22) IP属地:四川省
我来回答
您需要 登录 后回答此问题!