如果4040不可用,火花UI会尝试下一个端口的次数

时间:2018-05-17 22:26:45

标签: apache-spark spark-streaming

我们使用spark(使用版本2.1)shell同时运行多个作业。从过去几天开始,我们一直在收到错误:

  

失败:org.spark-project.jetty.server.Server@5552479:java.net.BindException:已在使用的地址

在阅读了几个堆栈溢出后,我发现默认情况下,我发现火花首次尝试使用Spark UI的端口4040,如果失败则尝试+1端口。

  • 如果让我们说4041也不可用,那么Spark会尝试多少次?

根据this stack overflow postspark documentation我们可以提供spark.port.maxRetries配置,默认设置为16,但

  • 此属性是否适用于spark.ui.port或其spark.driver.port的唯一申请?

  • spark如何决定哪个端口需要用于执行程序?并且假设我有一个使用20个执行器的工作,那么spark如何决定哪些端口用于那些执行器?我们可以控制吗?

1 个答案:

答案 0 :(得分:1)

maxRetries仅适用于驱动程序。初始化sparkContext时,它从spark.driver.port中指定的那个开始,然后通过将端口递增1来退出maxRetires时间。此端口对集群管理器分配的所有执行程序可见。因此,如果maxRetires为16,并且已经启动了16个SparkContext,则不会初始化新的sparkContext,直到其中一个退出。 Cluster Manager负责获取所需的资源以获取执行程序,我认为我们无法控制它获取的端口。只要执行程序能够在初始化它的端口上与驱动程序进行通信,就不会有问题。