Как заставить Spark 2.4.3 использовать фиксированные порты для исполнителей, или я мог игнорировать проблему, что Spark использует случайные порты исполнителя? - PullRequest
1 голос
/ 12 октября 2019

Я использую Spark 2.4.3 на пяти узлах в режиме клиента и автономном режиме для целей тестирования, и мне назначен ограниченный диапазон портов. Поэтому я настроил все порты, которые возможны в соответствии с документами, чтобы избежать того, что Spark берет произвольные порты за пределы моего освобожденного диапазона кода:

в spark-env.sh:

SPARK_MASTER_PORT=master-port<br>
SPARK_WORKER_PORT=worker-port

в командной строке для spark-submit:

-master master-ip:master-port 
--conf spark.blockManager.port=block-manager-port 
--conf spark.driver.blockManager.port=block-manager-port  
--conf spark.driver.port=driver-port

Но теперь я нахожу в журнале для драйвера:

... INFO CoarseGrainedSchedulerBackend$DriverEndpoint: 
Registered executor NettyRpcEndpointRef(spark-client://Executor) (worker-ip:arbitrary-port) 
with ID 4

Это означает, что искраиспользует произвольный порт для исполнителя - с номером порта, который находится за пределами назначенного мне диапазона - хотя у меня настроены все возможные порты.

Это приводит к следующей записи журнала для драйвера:

... INFO MapOutputTrackerMasterEndpoint: Asked to send map output locations
for shuffle 2 to worker-ip:arbitrary-port

В противном случае в каком-то рабочем журнале можно найти:

... INFO MapOutputTrackerWorker: Doing the fetch; tracker endpoint = 
NettyRpcEndpointRef(spark://MapOutputTracker@driver-ip:driver-port)
...
... INFO MapOutputTrackerWorker: Don't have map outputs for shuffle 13, fetching them
... INFO MapOutputTrackerWorker: Got the output locations

Таким образом, все работает, и в журналах нет других предупреждений или ошибок, касающихся этой проблемы. Но я новичок в искре, и я боюсь потери данных. Не могли бы вы дать какой-либо совет, если бы я мог игнорировать эту проблему или что я мог сделать, чтобы заставить Spark использовать порты в моем диапазоне освобожденного кода для исполнителей?

Я искал документы и Интернет, но информации неткак это исправить. Я проанализировал код Spark для классов, которые цитируются в приведенных выше записях журнала (CourseGrainedSchedulerBackend: DriverEndpoint.receiveAndReply, MapOutputTrackerMasterEndpoint.receiveAndReply), но не смог выяснить, откуда Spark получает произвольный номер порта.

...