我在 Google Cloud 中启动了一个 DataProc 集群。
我正在其中执行 Spark 应用程序。该应用程序的作用类似于网络服务器。它监听请求;然后触发 Spark 作业(又名:Spark 操作)并返回结果。 该集群仅专用于我的 Spark 应用程序;其中没有其他作业正在运行。 集群中的每个节点都连接有 375GB 硬盘。
当 Spark 应用程序满足请求时,它分叉的 Spark 作业(操作)会创建大量随机数据。
我的预期是:由于 Spark 应用程序继续运行,它会在某个时刻用洗牌数据耗尽磁盘空间(因为它不断收到请求)。 我什至在 Spark UI 中监控到聚合的 shuffle 数据正在增长,甚至已经超过了 375GB;但该作业正在满足新请求,而不会引发任何磁盘错误异常。
在应用程序中,我也启用了外部随机播放服务。
所以很明显应用程序正在删除随机数据;但不确定哪个 Spark 进程正在删除随机数据。
是executor进程本身还是每个节点上运行的外部shuffle服务进程?还是驱动程序进程?
有人可以照亮吗。
谢谢
Spark 有一项用于应用程序范围清理的服务 - ContextCleaner。默认情况下它是启用的。此外,就您而言,我会尝试将
spark.cleaner.referenceTracking.blocking.shuffle
设置为 true
,以确保完全删除随机播放文件。
请参阅页面Spark 配置了解更多信息。