本文主要是介绍spark(sparkSQL)报错 WARN TaskMemoryManager: Failed to allocate a page (bytes), try again.,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
背景
最近在跑 sparkSQL的时候,执行到一半,频繁打印日志报错:
WARN TaskMemoryManager: Failed to allocate a page (104876 bytes), try again.
WARN TaskMemoryManager: Failed to allocate a page (104876 bytes), try again.
…
原因
执行任务的内存不够,需要频繁回收资源
解决办法
1、优化sql脚本。(首选,当时我就是这么解决的)
2、增加driver内存, --driver-memory 6G
我当时的sql 简化如下:
select name
from stu
where id in (select id from in_stu);
stu数据量为 800w, in_stu 数据量为 1.2kw
优化为:
select name
from stu
where id in (select distinct id from in_stu);
优化后in_stu id 的数据量降到 11 w,问题解决。
扩展
对于sql优化,还有另一个解决思路:
当两张很大的表 做 join 操作,比如 a left join b
可以优化为: a left join (SELECT col1, col2, sum(col3) col3 from b group by col1, col2)b
也就是说在join的时候,对于另一张表先做group by 操作 从而降低数据量
这篇关于spark(sparkSQL)报错 WARN TaskMemoryManager: Failed to allocate a page (bytes), try again.的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!