Databricks集群缓存占用过高:如何完全禁用或缩减缓存
问题描述
当前Spark集群中“已用”内存仅约16GB,但缓存内存占用过高,导致不得不使用64GB的计算资源。已尝试执行以下代码禁用IO缓存:spark.conf.set("spark.databricks.io.cache.enabled", "false")
操作后缓存内存有所减少,但仍有大量残留,需要完全禁用缓存或进一步降低缓存占用的方法。
解决方法
禁用核心缓存机制
Spark的RDD/DataSet主动缓存(cache()/persist())和IO缓存相互独立,若代码中存在主动缓存操作,需处理:- 移除代码里的
df.cache()、rdd.persist()这类主动缓存调用。 - 运行时清除已缓存数据:
spark.catalog.clearCache() - 关闭自动广播表缓存:
spark.conf.set("spark.sql.autoBroadcastJoinThreshold", -1)
- 移除代码里的
限制缓存内存上限
通过调整内存分配参数压缩缓存可用空间:- 调低存储与执行内存的总占比(默认0.6):
spark.conf.set("spark.memory.fraction", 0.2) - 调低存储内存中缓存的预留比例(默认0.5):
spark.conf.set("spark.memory.storageFraction", 0.1)
- 调低存储与执行内存的总占比(默认0.6):
处理隐性缓存
排查内置功能或第三方库的隐性缓存:- 禁用Delta Lake缓存:
spark.conf.set("spark.databricks.delta.cache.enabled", "false") - 清除表缓存:
-- 清除指定表缓存 UNCACHE TABLE table_name; -- 清除所有表缓存 UNCACHE TABLES;
- 禁用Delta Lake缓存:
彻底释放缓存
若上述操作无效,重启Spark会话或集群可完全释放所有缓存占用的内存。
内容的提问来源于stack exchange,提问作者Manav Karthikeyan
相关产品推荐
相关产品推荐

