是否有一种方法可以防止Spark自动将spark-submit命令中通过--jars
指定的JAR文件复制到每个执行者节点的work/
文件夹中?
我的spark-submit
命令像这样指定作业的所有JAR依赖项
spark-submit \
--master <master> \
--jars local:/<jar1-path>,local:/<jar2-path>... \
<application-jar> \
<arguments>
这些JAR路径位于分布式文件系统上,该文件系统在所有群集节点上的相同位置可用。
现在,根据the documentation:
请注意,JAR和文件已复制到执行程序节点上每个SparkContext的工作目录中。随着时间的推移,这可能会占用大量空间,并且需要清理。
最后一句话绝对正确。我的JAR依赖项需要包含一些千兆字节的模型文件,当我在100个以上的节点上部署Spark作业时,您可以想象拥有100个这些文件副本会浪费大量磁盘空间,更不用说复制所需的时间了他们。
有没有一种方法可以防止Spark复制依赖项?我不确定我为什么首先需要复制它们,假定可以通过相同路径从每个群集节点访问JARS 。不必在每个节点的工作目录中保留每个JAR的不同副本。
同一Spark文档中提到了
本地:-以local:/开头的URI应该作为每个工作节点上的本地文件存在。这意味着将不会产生网络IO,并且对于推送到每个工作程序或通过NFS,GlusterFS等共享的大文件/ JAR来说效果很好。
...这正是我在spark-submit命令中引用JARS的方式。
因此,可以阻止Spark将通过local:/...
指定的所有JARS复制到每个群集节点的工作目录吗?如果是这样,怎么办?如果不是,那么为什么必须进行复制?
编辑:阐明副本是按节点(不是按执行者)