作者:maggieting0334_990 | 来源:互联网 | 2023-01-23 18:51
在《行动中的火花》一书中,我正在阅读以下内容:
“如果您要使用spark-submit脚本以集群部署模式提交应用程序,则您指定的JAR文件需要在执行该应用程序的工作程序上(在您指定的位置)可用。因为无法提前说明将由哪个工作程序执行驱动程序,所以如果您打算使用群集部署模式,则应将应用程序的JAR文件放在所有工作程序上,或者可以将应用程序的JAR文件放在HDFS上并使用HDFS URL作为JAR文件名。”
但是在官方文档中我看到了这一点:
1-如果您的代码依赖于其他项目,则需要将它们打包在您的应用程序旁边,以便将代码分发到Spark集群。为此,创建一个包含您的代码及其依赖项的程序集jar(或“超级” jar)。sbt和Maven都有程序集插件。创建程序集jar时,将Spark和Hadoop列为提供的依赖项;这些不需要捆绑在一起,因为它们是由集群管理器在运行时提供的。组装好jar后,可以在传递jar时调用bin / spark-submit脚本,如下所示。
2-如果您的应用程序是通过Spark提交启动的,则应用程序jar将自动分发到所有工作程序节点。对于您的应用程序所依赖的任何其他jar,您应通过--jars标志使用逗号作为分隔符来指定它们(例如--jars jar1,jar2)。要控制应用程序的配置或执行环境,请参阅Spark配置。
我在这里想念什么?它是如何工作的 ?我是否需要在整个群集上部署我的程序集jar(期待主节点)?
1> maasg..:
官方文档是正确的(正如我们期望的那样)。
TL; DR:无需跨集群复制应用程序文件或依赖项即可提交具有Spark任务的作业spark-submit
。
spark-submit
负责将应用程序jar交付给执行者。而且,使用该--jars
选项指定的jar文件也由驱动程序上的文件服务器提供给所有执行者,因此我们也不需要将任何依赖项都复制到执行者。Spark为您解决了这一问题。
有关更多详细信息,请参见“ 高级依赖关系管理”页面。