首页 文章

集群部署模式下的Spark-submit如何管理应用程序Jars

提问于
浏览
2

在Book Spark in Action中,我正在阅读:

“如果您使用spark-submit脚本以集群部署模式提交应用程序,则您指定的JAR文件需要在将要执行应用程序的worker(在您指定的位置)上可用 . 因为没有办法事先说明哪个worker会执行你的驱动程序,所以如果你打算使用集群部署模式,你应该把应用程序的JAR文件放在所有worker上,或者你可以将应用程序的JAR文件放在HDFS上并使用HDFS URL作为JAR文件名 . “

但是在官方文档中我看到了这个:

1 - 如果您的代码依赖于其他项目,则需要将它们与应用程序一起打包,以便将代码分发到Spark集群 . 为此,请创建包含代码及其依赖项的程序集jar(或“uber”jar) . sbt和Maven都有汇编插件 . 在创建程序集jar时,将Spark和Hadoop列为提供的依赖项;这些不需要捆绑,因为它们是由集群管理器在运行时提供的 . 一旦你有一个组装的jar,你可以在传递你的jar时调用bin / spark-submit脚本,如下所示 . 2 - 如果您的应用程序是通过Spark submit启动的,那么应用程序jar会自动分发到所有工作节点 . 对于您的应用程序所依赖的任何其他jar,您应该使用逗号作为分隔符(例如--jars jar1,jar2)通过--jars标志指定它们 . 要控制应用程序的配置或执行环境,请参阅Spark配置 .

我在这里想念的是什么?它是如何工作的 ?我是否需要在整个群集中部署我的程序集jar(期望主节点)?

3 回答

  • 1

    官方文档是正确的(正如我们所期望的那样) .

    TL; DR:无需在群集中复制应用程序文件或依赖项以使用spark-submit提交Spark作业 .

    spark-submit 负责将应用程序jar传递给执行程序 . 更重要的是,使用 --jars 选项指定的jar文件也由驱动程序上的文件服务器提供给所有执行程序,因此我们也不需要将任何依赖项复制到执行程序 . Spark会为您解决这个问题 .

    有关详细信息,请参见Advanced Dependency Management页面

  • 0

    当您在 cluster 部署模式下运行作业时,通过 --jars 指定的从属JARS将从本地路径复制到HDFS上的容器 .

    以下是控制台输出,您可以在其中看到应用程序JAR(mapRedQA-1.0.0.jar)以及所需的配置(__ spark_conf__5743283277173703345.zip)上传到HDFS上的容器,所有执行程序节点都可以访问该容器 . 这就是为什么你不需要将应用程序JAR放在工作节点上的原因Spark会处理它 .

    17/08/10 11:42:55 INFO yarn.Client: Preparing resources for our AM container 17/08/10 11:42:57 INFO yarn.YarnSparkHadoopUtil: getting token for namenode: hdfs://master.localdomain:8020/user/user1/.sparkStaging/application_1502271179925_0001 17/08/10 11:43:19 INFO hdfs.DFSClient: Created token for user1: HDFS_DELEGATION_TOKEN owner=user1@EXAMPLE.COM, renewer=yarn, realUser=, issueDate=1502379778376, maxDate=1502984578376, sequenceNumber=6144, masterKeyId=243 on 2.10.1.70:8020 17/08/10 11:43:25 INFO yarn.Client: Uploading resource file:/Automation/mapRedQA-1.0.0.jar -> hdfs://master.localdomain:8020/user/user1/.sparkStaging/application_1502271179925_0001/mapRedQA-1.0.0.jar 17/08/10 11:43:51 INFO yarn.Client: Uploading resource file:/tmp/spark-f4e913eb-17d5-4d5b-bf99-c8212715ceaa/__spark_conf__5743283277173703345.zip -> hdfs://master.localdomain:8020/user/user1/.sparkStaging/application_1502271179925_0001/__spark_conf__5743283277173703345.zip 17/08/10 11:43:52 INFO spark.SecurityManager: Changing view acls to: user1 17/08/10 11:43:52 INFO spark.SecurityManager: Changing modify acls to: user1 17/08/10 11:43:52 INFO spark.SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(user1); users with modify permissions: Set(user1) 17/08/10 11:43:53 INFO yarn.Client: Submitting application 1 to ResourceManager 17/08/10 11:43:58 INFO impl.YarnClientImpl: Application submission is not finished, submitted application application_1502271179925_0001 is still in NEW t: Application report for application_1502271179925_0001 (state: ACCEPTED)

  • 4

    如果为群集定义了HDFS,则无需在整个节点上复制应用程序jar . 如果在这种情况下没有hdfs支持的集群,则需要使用相同的路径隐式地复制整个工作者/从属服务器上的所有应用程序jar .

相关问题