Scala Spark Standalone Cluster deployMode=";“集群”:我的司机在哪里?

Scala Spark Standalone Cluster deployMode=";“集群”:我的司机在哪里?,scala,apache-spark,Scala,Apache Spark,我花了很长时间研究这个问题,找到的答案似乎与我的问题略有不同 更新:Spark文档称驱动程序在deployMode:cluster中的群集工作程序上运行。当您不使用spark submit时,这似乎不是真的 我的Spark 2.3.3群集运行良好。我在“”上看到GUI,按配置有2个空闲工作进程 我有一个Scala应用程序,可以创建上下文并启动作业。我不使用spark submit,而是以编程方式启动作业,这就是许多答案与我的问题不一致的地方 在“我的应用程序”中,我创建了一个新的SparkCon

我花了很长时间研究这个问题,找到的答案似乎与我的问题略有不同

更新:Spark文档称驱动程序在deployMode:cluster中的群集工作程序上运行。当您不使用spark submit时,这似乎不是真的

我的Spark 2.3.3群集运行良好。我在“”上看到GUI,按配置有2个空闲工作进程

我有一个Scala应用程序,可以创建上下文并启动作业。我不使用spark submit,而是以编程方式启动作业,这就是许多答案与我的问题不一致的地方

在“我的应用程序”中,我创建了一个新的SparkConf,代码如下(略缩写):

启动作业时,我看到2个执行器在2个节点/工作者/从属节点上运行。日志显示了它们的IP地址,并将它们称为执行器0和1

对于纱线集群,我希望“驱动程序”在纱线主控器上/中运行,但我使用的是Spark Standalone主控器,作业的驱动程序部分在哪里运行?如果它在随机工人或其他地方运行,是否有办法从日志中找到它

我的Spark驱动程序在哪里执行?当不使用Spark submit时,部署模式是否有效?证据显示群集有一个主机(与执行器0在同一台机器上)和2个工作进程。它还显示了作业期间两个工作进程上相同的内存使用情况。从日志中我知道两个工作进程都在运行执行器。驱动程序在哪里

“驱动程序”创建并广播一些大型数据结构,因此对答案的需求比使用更典型的小型驱动程序更为关键

驱动程序在哪里运行?在日志和监控的情况下,我如何找到它?我无法将我看到的与文档相协调,它们相互矛盾。

答案如下:

然而,在集群模式下,驱动程序是从集群中的一个工作进程启动的,客户端进程在完成提交应用程序的职责后立即退出,而不必等待应用程序完成


换句话说,驱动程序使用任意工作节点,因此它很可能与执行器上的一个工作节点在这样小的集群上共同定位。为了预测后续问题——这种行为是不可配置的——您只需确保集群有能力启动所需的执行器和具有所需内存的驱动程序和内核。

我读了很多次,发现它不完整。一方面我从未要求两个执行器,我只创建了两个从。另一方面,我确实指定了分配给驱动程序和执行程序的内存量,因此根据内存分配规则,应该有一个驱动程序和一个执行器。我查看运行期间使用的内存我发现每个工人的工作实际上是平等的。那么,驱动程序在哪里?我不希望每次都在同一个地方,但我无法在日志中或通过监视所有机器来确定它在哪里或消耗了多少资源。顺便说一句,我知道有2个执行器,因为它们在日志中,执行器的地址为0和1,它们是从机地址。
  conf.setAppName(“my-job")
  conf.setMaster(“spark://master-address:7077”)
  conf.set(“deployMode”, “cluster”)
  // other settings like driver and executor memory requests
  // the driver and executor memory requests are for all mem on the slaves, more than 
  // mem available on the launching machine with “my-app"
  val jars = listJars(“/path/to/lib")
  conf.setJars(jars)
  …