Apache spark 如果4040不可用,spark UI尝试下一个端口的次数

Apache spark 如果4040不可用,spark UI尝试下一个端口的次数,apache-spark,spark-streaming,Apache Spark,Spark Streaming,我们使用spark(使用2.1版)shell同时运行多个作业。从最近几天开始,我们不断地发现错误: 失败:org.spark-project.jetty.server。Server@5552479:java.net.BindException:地址已在使用中 在阅读了两个堆栈溢出后,我发现spark在默认情况下第一次尝试spark UI的4040端口,如果失败,它会尝试+1端口 如果说4041也不可用,Spark会尝试多少次 根据和,我们可以提供默认设置为16的spark.port.maxR

我们使用spark(使用2.1版)shell同时运行多个作业。从最近几天开始,我们不断地发现错误:

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

在阅读了两个堆栈溢出后,我发现spark在默认情况下第一次尝试spark UI的4040端口,如果失败,它会尝试+1端口

  • 如果说4041也不可用,Spark会尝试多少次
根据和,我们可以提供默认设置为16的
spark.port.maxRetries
配置,但是

  • 此属性是应用于
    spark.ui.port
    还是仅应用于
    spark.driver.port

  • spark如何决定它将为executor使用哪个端口?假设我有一个使用20个执行器的工作,那么spark如何决定这些执行器使用哪些端口呢?我们能控制吗


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

群集管理器分配的所有执行器都可以看到此端口。所以如果maxRetires是16,如果已经启动了16个SparkContext,在其中一个退出之前,不能初始化新的sparkContext->对于每个spark驱动程序/作业,都有一个sparkContext,如果一个作业有10个执行器,它会使用下10个端口吗?spark.driver.port仅用于驱动程序,如果端口已被另一个sparkApplication占用,则会递增。现在对于执行器,spark.executor.port将基于maxRetries递增。这里有一些有用的链接,