首页 > 解决方案 > 防止 Spark 将 JAR 依赖项复制到每个执行程序节点的 `work/` 文件夹

问题描述

有没有办法阻止 Spark 自动将--jarsspark-submit 命令中指定的 JAR 文件复制到work/每个执行程序节点的文件夹中?

我的spark-submit命令像这样指定作业的所有 JAR 依赖项

spark-submit \
  --master <master> \
  --jars local:/<jar1-path>,local:/<jar2-path>... \
  <application-jar> \
  <arguments>

这些 JAR 路径存在于分布式文件系统上,该文件系统位于所有集群节点的同一位置。

现在,根据文档

请注意,JAR 和文件将复制到执行程序节点上每个 SparkContext 的工作目录。随着时间的推移,这可能会占用大量空间,并且需要进行清理。

最后一句话是绝对正确的。我的 JAR 依赖项需要包含一些千兆字节的模型文件,当我将 Spark 作业部署到 100 个节点上时,您可以想象拥有 100 个这些文件的副本会浪费大量的磁盘空间,更不用说复制所需的时间了他们。

有没有办法阻止 Spark 复制依赖项?我不确定我是否理解为什么首先需要复制它们,因为 JARS 可以通过相同的路径从每个集群节点访问。不需要在每个节点的工作目录中保留每个 JAR 的不同副本。

同样的 Spark 文档提到

local: - 以 local:/ 开头的 URI 应作为本地文件存在于每个工作节点上。这意味着不会产生网络 IO,并且适用于推送给每个工作人员或通过 NFS、GlusterFS 等共享的大型文件/JAR。

...这正是我在 spark-submit 命令中引用 JARS 的方式。

那么,是否可以阻止 Spark 将 via 指定的所有 JARS 复制local:/...到每个集群节点的工作目录中?如果是这样,怎么做?如果没有,是否有理由必须进行这种复制?

编辑:澄清副本是每个节点(不是每个执行者)

标签: apache-spark

解决方案


推荐阅读