当在客户端模式(例如yarn-client)下使用spark 时,运行驱动程序的本地机器是否直接与运行远程执行器的集群工作节点通信?
如果是,这是否意味着机器(运行驱动程序)需要有网络访问工作节点?所以主节点从集群请求资源,并将工作节点的IP地址/端口返回给驱动程序,这样驱动程序就可以启动与工作节点的通信?
如果没有,客户端模式实际上是如何工作的?
如果是,是否意味着如果集群配置成工作节点在集群外不可见的方式,客户端模式将不起作用,并且必须使用集群模式?
谢谢!
Driver连接到Spark Master,请求上下文,然后Spark Master将Driver的详细信息传递给Spark Workers,以便进行通信并获得下一步操作的指令。
意味着驱动节点必须在网络上对工作人员可用,并且它的IP必须是对他们可见的(即,如果驱动程序在NAT后面,而工作人员在不同的网络中,它将不起作用,您将看到工作人员上的错误,他们无法连接到驱动程序)
在客户端模式下运行Spark时,驱动进程在本地运行。在集群模式下,它在ApplicationMaster上远程运行。
换句话说,您需要所有节点都能看到彼此。Spark驱动程序肯定需要与所有工作节点通信。如果这是一个问题,请尝试使用yarn-cluster
模式,那么驱动程序将在您的集群中的一个节点上运行。