如何为严格的防火墙配置Apache Spark随机工作端口?

16

我正在使用Apache Spark运行机器学习算法和其他大数据任务。之前,我在单独模式下使用Spark集群,在同一台机器上运行Spark主节点和工作节点。现在,我添加了多个工作节点,由于防火墙限制,我必须编辑工作节点的随机端口。请问有人可以告诉我如何更改Spark的随机端口,以及需要编辑哪个配置文件吗?我阅读了Spark文档,并表示spark-defaults.conf应该进行配置,但我不知道如何为特别更改Spark的随机端口来配置此文件。


1
这个问题似乎更适合于serverfault.com,因为它似乎是一个配置问题而不是编程问题,你觉得呢? - MKroehnert
2个回答

17

Spark 2.x 更新


一些库已经从头开始重写,许多旧的*.port属性现在已经过时 (详见 SPARK-10997 / SPARK-20605 / SPARK-12588 / SPARK-17678 等)

例如,对于 Spark 2.1,驱动程序将用于监听执行器流量的端口范围为:

  • spark.driver.portspark.driver.port+spark.port.maxRetries之间
  • spark.driver.blockManager.portspark.driver.blockManager.port+spark.port.maxRetries之间

执行器将用于监听驱动程序流量和/或其他执行器流量的端口范围为:

  • spark.blockManager.portspark.blockManager.port+spark.port.maxRetries之间

"maxRetries" 属性允许同时运行多个 Spark 作业;如果基础端口已被使用,则新作业将尝试下一个端口等等,除非整个范围已被使用。

来源:
   https://spark.apache.org/docs/2.1.1/configuration.html#networking
   https://spark.apache.org/docs/2.1.1/security.html(在“配置端口”下)


11

请在这里检查。

在“Networking”部分中,您可以看到一些端口默认情况下是随机的。您可以按照以下方式设置它们:

val conf = new SparkConf() 
    .setMaster(master) 
    .setAppName("namexxx") 
    .set("spark.driver.port", "51810") 
    .set("spark.fileserver.port", "51811") 
    .set("spark.broadcast.port", "51812") 
    .set("spark.replClassServer.port", "51813") 
    .set("spark.blockManager.port", "51814") 
    .set("spark.executor.port", "51815") 

问题:为什么要指定执行器端口 - 这个值不是给工作节点用的吗?(请参阅http://spark.apache.org/docs/latest/security.html) - M156
1
据我所知,一个工作进程可以有多个执行器,而驱动程序会将任务分配给这些执行器。它们之间的通信是通过TCP协议和端口号进行的。我指定端口号是为了避免我的防火墙阻止通信,因为默认情况下我的防火墙会阻止可疑的端口。 - keypoint
1
但是驱动程序不需要打开spark.executor.port,它会连接到worker上的spark.executor.port吗? - M156
端口只是驱动程序和执行器用于通信的隧道,据我所知,它们监听其打开的端口以接收传入消息... - keypoint
当您需要运行多个Spark作业时,您该怎么做?端口会不会冲突? - harschware
1
警告:自Spark 2.0以来,大多数这些属性已被弃用,因为驱动程序/执行器通信已进行了重构... - Samson Scharfrichter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接