cre*_*o56 5 apache-spark spark-streaming
我正在运行 Spark 3.4 长时间运行的结构化流作业。每当作业启动时,都会在工作目录中为该作业创建一个app-xxxxxxxxxx形式的应用程序目录。但是,在该目录中,会创建其他目录,第一个目录名为0,第二个目录名为1,依此类推。
我的第一个问题是,为什么要创建这些目录?在结构化流作业的过程中,微批次可能会被触发 20 次,但在app-xxxxxxxxxx目录下只创建了 4 个子目录,重点是这些子目录的创建并不对应于执行微批次。所以,我不确定为什么要创建它们。
我的第二个相关问题是,如何配置 Spark 在一定时间后删除这些文件夹?每个文件都包含应用程序 .jar 以及 stderr 和 stdout 文件,因此随着时间的推移,它们会占用大量空间。我的理解是,设置spark.worker.cleanup.enabled=true仅启用已停止应用程序的清理。但就我而言,我有一个长时间运行的应用程序,我想为其启用清理功能。
您正在谈论工作目录和配置Spark.worker,所以我的假设是您正在 Spark 的独立模式下运行流作业(不使用 YARN 等集群管理器,因为那里的情况完全不同)。
根据Spark Standalone 模式的文档,工作目录被描述为:运行应用程序的目录,其中包括日志和暂存空间(默认:SPARK_HOME/work)。
这里的暂存空间意味着它“包括存储在磁盘上的映射输出文件和 RDD。这应该位于系统中的快速本地磁盘上。它也可以是不同磁盘上的多个目录的逗号分隔列表。”
在工作文件夹中,您将找到每个应用程序的 .jar 库,以便执行程序可以访问这些库。此外,它还包含一些基于处理逻辑和实际数据(而不是处理触发器数量)的临时数据。子文件夹0、1对于不同作业/阶段或同一应用程序的运行是增量的。(坦白说,我对这些子文件夹并不完全了解。)
可以通过以下三种配置来调整此文件夹的清理,如下SPARK_WORKER_OPTS所述:
Spark.worker.cleanup.enabled - 默认值::
false启用工作/应用程序目录的定期清理。请注意,这仅影响独立模式,因为 YARN 的工作方式不同。仅清理已停止应用程序的目录。如果spark.shuffle.service.db.enabled 为“true”,则应启用此功能Spark.worker.cleanup.interval - 默认值:
1800(30 分钟):控制工作线程清理本地计算机上旧应用程序工作目录的时间间隔(以秒为单位)。Spark.worker.cleanup.appDataTtl - 默认值:
604800(7 天,7 * 24 * 3600):在每个工作线程上保留应用程序工作目录的秒数。这是生存时间,应取决于您拥有的可用磁盘空间量。应用程序日志和 jar 下载到每个应用程序工作目录。随着时间的推移,工作目录会很快填满磁盘空间,特别是当您非常频繁地运行作业时。
| 归档时间: |
|
| 查看次数: |
2535 次 |
| 最近记录: |