缓冲区/caching耗尽Docker容器内的Spark独立

我有一个非常奇怪的内存问题(这是很多人最可能会说的;-))与在Docker容器内独立模式下运行的Spark。 我们的设置如下:我们有一个Docker容器,我们有一个Spring启动应用程序,以独立模式运行Spark。 这个Spring启动应用程序还包含一些计划任务(由Springpipe理)。 这些任务触发Spark作业。 Spark作业会抓取SQL数据库,将数据洗牌一下,然后将结果写入不同的SQL表(写入结果不经过Spark)。 我们目前的数据集非常小(该表包含几百万行)。

问题是运行Docker容器的Docker主机(CentOS VM)在一段时间后崩溃,因为内存耗尽。 我目前已经限制了512M的Spark内存使用(我已经设置了执行程序和驱动程序内存),在Spark UI中,我可以看到最大的作业只需要大约10 MB的内存。 我知道如果Spark有8GB内存或更多的可用空间,Spark运行得最好。 我也尝试过,但结果是一样的。

进一步挖掘之后,我注意到Spark消耗了机器上的所有缓冲区/caching。 通过强制Linux删除caching(echo 2> / proc / sys / vm / drop_caches)(清除dentries和inode),手动清除caching的使用率将大大降低,但如果我不经常这样做,我会发现caching使用缓慢持续上升,直到所有内存在缓冲区/caching中使用。

有没有人有一个想法,我可能做错了/这是怎么回事?

非常感谢提前任何帮助!