NettyBlockTransferService не поддерживает конфигурацию spark.blockManager.port - PullRequest
2 голосов
/ 27 марта 2020

Я использую Spark 2.4.4. на пряжи. Конфигурация искры на NodeManager выглядит следующим образом:

spark-defaults.conf:

spark.driver.port=38429
spark.blockManager.port=35430
spark.driver.blockManager.port=44349

Когда создаются драйвер Spark и исполнители, они выбирают порт драйвера (38429) конфиг, но не конфиг blockManager (35430) / driver.blockManager (44349). Порты blockManager назначаются случайным образом

Драйвер:

14:23:40 INFO spark.SparkContext: Running Spark version 2.4.4
14:23:40 INFO util.Utils: Successfully started service 'sparkDriver' on port **38429**.
14:23:41 INFO util.Utils: Successfully started service 'org.apache.spark.network.netty.NettyBlockTransferService' on port 38171.
14:23:41 INFO netty.NettyBlockTransferService: Server created on driverhost:**38171**

Исполнитель:

14:23:44 INFO client.TransportClientFactory: Successfully created connection to driverhost:**38429** after 73 ms (0 ms spent in bootstraps)
14:23:45 INFO executor.Executor: Starting executor ID 1 on host ...
14:23:45 INFO util.Utils: Successfully started service 'org.apache.spark.network.netty.NettyBlockTransferService' on port 34914.
14:23:45 INFO netty.NettyBlockTransferService: Server created on executorhost:**34914**

Я столкнулся с ошибкой Jira, описывающей эту проблему, но она возникла в Spark 2.4.0 и закрыто 12 месяцев a go: https://issues.apache.org/jira/browse/SPARK-27139

Глядя на код Spark в GitHub, я не могу обнаружить ничего очевидного:

https://github.com/apache/spark/blob/branch-2.4/core/src/main/scala/org/apache/spark/SparkEnv.scala

333    val blockManagerPort = if (isDriver) {
334      conf.get(DRIVER_BLOCK_MANAGER_PORT)
335    } else {
336      conf.get(BLOCK_MANAGER_PORT)
337    }
338
339    val blockTransferService =
340      new NettyBlockTransferService(conf, securityManager, bindAddress, advertiseAddress,
341        blockManagerPort, numUsableCores)

https://github.com/apache/spark/blob/branch-2.4/core/src/main/scala/org/apache/spark/internal/config/package.scala

308  private[spark] val BLOCK_MANAGER_PORT = ConfigBuilder("spark.blockManager.port")
309    .doc("Port to use for the block manager when a more specific setting is not provided.")
310    .intConf
311    .createWithDefault(0)
312
313  private[spark] val DRIVER_BLOCK_MANAGER_PORT = ConfigBuilder("spark.driver.blockManager.port")
314    .doc("Port to use for the block manager on the driver.")
315    .fallbackConf(BLOCK_MANAGER_PORT)

Может кто-нибудь сказать мне, почему мои порты NettyBlockTransferService назначаются случайным образом, а не 35430 или 44349?

1 Ответ

0 голосов
/ 03 апреля 2020

Проблема здесь заключалась в настройке этого конфига на YARN NodeManager. Его необходимо настроить на клиенте, т.е. в процессе, который отправляет приложение Spark, а не в самом кластере.

...