Невозможно получить код Python, работающий на платформе Windows, для подключения к локальному автономному кластеру Spark, работающему в Docker - PullRequest
0 голосов
/ 30 апреля 2019

Невозможно заставить работать код 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 поддерживает это).

...