Apache spark 带有显式setMaster(“local”)的Spark作业,与纱线一起传递给Spark提交
如果我使用Apache spark 带有显式setMaster(“local”)的Spark作业,与纱线一起传递给Spark提交,apache-spark,Apache Spark,如果我使用setMaster(“local”)编译了一个Spark作业(2.2.0),如果我使用Spark submit--master Thread--deploy mode cluster发送该作业,会发生什么 我试过了,看起来这项工作是在纱线集群上完成的,而不是在本地完成的 我不清楚的是: 为什么这样做有效?根据文档,您在SparkConf中设置的内容明显优先于从命令行或通过spark submit传递的内容(请参阅:)。这是不是因为我使用的是SparkSession.getBuilde
setMaster(“local”)
编译了一个Spark作业(2.2.0),如果我使用Spark submit--master Thread--deploy mode cluster
发送该作业,会发生什么
我试过了,看起来这项工作是在纱线集群上完成的,而不是在本地完成的
我不清楚的是:
- 为什么这样做有效?根据文档,您在
中设置的内容明显优先于从命令行或通过SparkConf
传递的内容(请参阅:)。这是不是因为我使用的是spark submit
SparkSession.getBuilder
- 在代码中保留
与删除它相比,是否有不太明显的影响?我想知道我看到的是不是集群中以本地模式运行的作业,而不是正确使用集群资源setMaster(“本地”)
- 这是因为在
SparkConf.setMaster
之前就向纱线提交了申请
当您使用--master warn--deploy mode cluster
时,Spark将在本地机器中运行其主要方法,并将jar上载到warn上运行。Thread将分配一个容器作为运行Spark驱动程序(也称为代码)的应用程序主控程序SparkConf.setMaster(“local”)
在纱线容器中运行,然后创建以本地模式运行的SparkContext,而不使用纱线集群资源
我建议不要在代码中设置master。只需使用命令行--master
或master
env来指定Spark master
如果我有一个用setMaster(“local”)编译的Spark作业(2.2.0),如果我用Spark submit--master thread--deploy模式集群发送该作业,会发生什么
setMaster
具有最高优先级,因此不包括其他选项
我的建议是:不要用这个(除非你让我相信我错了——觉得有挑战性:)
这就是为什么我强烈主张尽早并经常使用spark submit
。它默认为local[*]
,并且工作得很好。在Spark的最新版本中,它甚至得到了改进,添加了一个漂亮的应用程序名(akaappName
),因此您不必设置它(或者甚至…请不要…硬核)
鉴于我们正处于Spark 2.2天,Spark SQL是Spark中所有好东西的入口点,您应该始终从SparkSession
开始(忘记SparkConf
或SparkContext
太低级)
我所知道的在Spark应用程序中何时可以使用
setMaster
的唯一原因是您希望在IDE中运行应用程序(例如IntelliJ IDEA)。如果没有setMaster
,您将无法运行应用程序
一种解决方法是对源代码(在sbt中)使用
src/test/scala
,并使用一个带有setMaster
的启动器来执行主应用程序。谢谢,这就是我想要的答案。听起来这可能会引起混淆:如果Spark在本地模式下运行,在Thread应用程序管理器中,它是否为本地模式并不明显。可以提供一个如何在src/test/scala中使用launcher的示例吗?