Невозможно заставить работать код Python на платформе разработки на базе Windows для подключения к автономному кластеру Spark, работающему в Docker на той же платформе разработки Windows.
Если я не могу заставить это работать,Я могу решить не отлаживать код Python с компьютера Windows;Протестируйте код во внутреннем Docker-контейнере под управлением Linux, сохранив код в постоянном томе, доступном для Docker-контейнера, и отправив / выполнив задание оттуда для тестирования.Честно говоря, это может быть лучшим способом структурирования кода в производстве, и это может избавить от необходимости разбираться в этом сетевом кошмаре Windows.Мне нужна архитектура, которая будет поддерживать выполнение кода в облаке Azure, поэтому для этого мне может потребоваться переключиться в режим кластера или, возможно, даже использовать режим кластера по умолчанию.Я действительно думаю, что может быть проблема с использованием Python (Pyspark) при работе в режиме кластера, так как я не думаю, что это в настоящее время поддерживается.
- Код Spark отлично работает во внутренней сети докера.
- Сообщение об ошибке при запуске из Windows: начальное задание не приняло никаких ресурсов;проверьте пользовательский интерфейс кластера, чтобы убедиться, что рабочие зарегистрированы и имеют достаточные ресурсы
- Поскольку код Spark отлично работает во внутренней сети докеров, я предполагаю, что проблемы связаны с тем, что порты не открыты в контейнерах Docker.
Связанный раздел файла Docker-Compose:
spark-master:
image: appx_clean_spark:latest
container_name: spark-master
depends_on:
- redis
hostname: spark-master
ports:
- "4040:4040"
- "8080:8080"
- "7077:7077"
- "51400:51400"
- "51500:51500"
networks:
- gateway
environment:
MASTER: "spark://spark-master:7077"
SPARK_PUBLIC_DNS: "172.18.0.4"
# Added new below
SPARK_MASTER_PORT: "7077"
SPARK_MASTER_WEBUI_PORT: "8080"
SPARK_DRIVER_PORT: "7001"
SPARK_BROADCAST_FACTORY: "=org.apache.spark.broadcast.HttpBroadcastFactory"
SPARK_MASTER_OPTS: >-
-Dspark.ui.port=4040
-Dspark.fileserver.port=7002
-Dspark.broadcast.port=7003
-Dspark.replClassServer.port=7004
-Dspark.blockManager.port=7005
-Dspark.executor.port=7006
# Added new above
expose:
- "4040"
- "7001"
- "7002"
- "7003"
- "7004"
- "7005"
- "7006"
- "7077"
- "8080"
- "8888"
- "51400"
- "51500"
command: "/start-master.sh"
# restart: always
spark-worker:
image: appx_clean_spark:latest
container_name: spark-worker
depends_on:
- spark-master
ports:
- "7005:7005"
- "7006:7006"
- "8081:8081"
- "6066:6066"
networks:
- gateway
environment:
SPARK_PUBLIC_DNS: "172.18.0.4"
SPARK_MASTER: "spark://spark-master:7077"
# Added below
SPARK_WORKER_CORES: "4"
SPARK_WORKER_MEMORY: "1g"
SPARK_WORKER_PORT: "6066"
SPARK_WORKER_WEBUI_PORT: "8081"
SPARK_DRIVER_PORT: "7001"
SPARK_BROADCAST_FACTORY: "org.apache.spark.broadcast.HttpBroadcastFactory"
SPARK_WORKER_OPTS: >-
-Dspark.ui.port=4040
-Dspark.fileserver.port=7002
-Dspark.broadcast.port=7003
-Dspark.replClassServer.port=7004
-Dspark.blockManager.port=7005
-Dspark.executor.port=7006
# Added above
expose:
- "4040"
- "6066"
- "7001"
- "7002"
- "7003"
- "7004"
- "7005"
- "7006"
- "8081"
- "8888"
command: "/start-worker.sh"
# restart: always
networks:
gateway:
driver: bridge
ipam:
driver: default
Я ожидаю, что смогу подключиться из кода Visual Studio к локальному автономному кластеру Spark-Docker или к кластеру Azure Sparkизменив только несколько строк кода.
Я пытаюсь сначала запустить клиентский режим, а затем кластерный режим (если Pyspark поддерживает это).