升级到Spark 2.3.1之后,UNCACHE TABLE和CLEAR CACHE不会清除执行程序内存。对于2.2.0,我们看到在UNCACHE TABLE之后释放了执行程序内存,但是在2.3.1中有所改变。我们想知道是否有任何方法可以强制清理执行程序的内存。
通过Spark UI,尽管在存储中,我们看到已删除缓存表。缓存的数据不可用于查询。但是,在“执行程序”选项卡中,执行程序继续保留RDD,并且不会清除内存。这导致执行程序内存使用量的巨大浪费。当我们称为CACHE TABLE时,我们遇到了以下问题:将缓存的表溢出到磁盘上,而不是回收内存存储。
复制步骤:
缓存表test.test_cache;
UNCACHE TABLE test.test_cache;
==存储显示表未缓存;执行程序显示执行程序的存储内存未更改==
缓存表test.test_cache;
清除缓存;
==存储显示表未缓存;执行程序显示执行程序的存储内存未更改==
使用pyspark df.unpersist()时的行为类似。