apache-spark - 防止 Spark 将 JAR 依赖项复制到每个执行程序节点的 `work/` 文件夹
问题描述
有没有办法阻止 Spark 自动将--jars
spark-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:/...
到每个集群节点的工作目录中?如果是这样,怎么做?如果没有,是否有理由必须进行这种复制?
编辑:澄清副本是每个节点(不是每个执行者)
解决方案
推荐阅读
- python - Python:元组集的并集
- angular - Angular 2 (v6) 中的路由
- python - Python requests.get() 返回损坏的源代码而不是预期的源代码?
- google-drive-api - Google Drive sdk 标准错误代码文档
- django - Django - 使用中间用户组模型
- javascript - 注销频道监听器
- c++ - 为什么 std::is_assignable 不适用于原始类型?(确认)
- javascript - 角度路线不会更新到孩子的路径
- git - 有没有办法在 git 日志中移动提交?
- python - 在 Windows 上获取 Python3 中 .exe 文件的输出