我对此进行了大量研究,并找到了与我的问题稍有不同的答案。
更新:Spark文档说该驱动程序在deployMode:cluster的群集Worker上运行。当您不使用spark-submit时,情况似乎并非如此
我的Spark 2.3.3群集运行良好。我在“ http://master-address:8080”上看到GUI,按照配置,有2个空闲工作器。
我有一个Scala应用程序,它可以创建上下文并启动Job。 我不使用发送火花,我以编程方式启动工作,这是许多答案与我的问题有所不同的地方。
在“ my-app”中,我创建一个新的SparkConf,其代码如下(略略):
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)
…
启动作业时,我看到2个执行程序在2个节点/工作人员/从属上运行。日志显示其IP地址,并将其称为执行程序0和1。
对于Yarn群集,我希望“驱动程序”在Yarn主服务器上/中运行,但是我正在使用Spark Standalone Master,作业的Driver部分在哪里运行?如果它在随机工人或其他地方运行,有没有办法从日志中找到它
我的Spark驱动程序在哪里执行?如果不使用Spark-Submit,deployMode
= cluster
有效吗?证据显示一个集群包含一个主服务器(与执行程序0在同一台计算机上)和2个工作线程。在工作期间,这两个工作线程上的内存使用情况也相同。从日志中,我知道两个工作线程都在运行执行程序。司机在哪里?
“驱动程序”会创建并广播一些大型数据结构,因此与更典型的小型驱动程序相比,答案的需求更为关键。
驱动程序在哪里运行?如何在给定日志和监视的情况下找到它?我无法调和我在文档中看到的内容,它们彼此矛盾。
答案 0 :(得分:1)
这是by the official documentation的回答:
但是,在集群模式下,驱动程序是从集群内的一个Worker进程中启动的,并且只要客户端进程履行了提交应用程序的职责而无需等待应用程序完成,客户端进程便会退出。
换句话说,驱动程序使用任意的工作程序节点,因此在这样的小型集群上,它很可能与执行程序上的一个节点共存。并且要预料到后续问题-这种行为是不可配置的-您只需要确保群集具有启动所需的执行程序以及具有其请求的内存和内核的驱动程序的能力即可。