Я играл с HDFS и Spark. Я настроил кластер из пяти узлов в своей сети, работающий с HDFS, Spark и управляемый Yarn. Воркеры работают в клиентском режиме. С главного узла я могу нормально запустить оболочку PySpark. При запуске примеров jar задание распределяется по рабочим узлам и выполняется хорошо.
У меня есть несколько вопросов о том, как запускать файлы python/Pyspark в этом кластере.
Если у меня есть файл python с вызовами PySpark в другом месте, например, на моем локальном ноутбуке разработчика или где-то в контейнере докеров, есть ли способ запустить или отправить этот файл локально и выполнить его на удаленном кластере Spark? Методы, которые мне интересны, включают запуск spark-submit в локальной среде/среде докеров, но файл имеет SparkSession.builder.master(), настроенный для удаленного кластера.
Связано это с тем, что я вижу конфигурацию для --master в spark-submit, но единственный вариант пряжи - передать «пряжу», которая, кажется, ставится в очередь только локально? Есть ли способ указать удаленную пряжу?
Если я могу настроить и запустить файл удаленно, как мне настроить SparkSession.builder.master()? Является ли URL-адрес только URL-адресом hdfs:// для порта 9000, или я должен отправить его на один из портов Yarn?
ТИА!
способ запустить или отправить этот файл локально и выполнить его на удаленном кластере Spark
Да, ну "YARN", а не "удаленный кластер Spark". Вы устанавливаете --master=yarn
при работе с spark-submit
, и это будет работать с настроенным yarn-site.xml
в переменной среды HADOOP_CONF_DIR. Вы можете определить это на уровне ОС или в spark-env.sh
.
Вы также можете использовать SparkSession.builder.master('yarn')
в коде. Если указаны оба параметра, один из них будет переопределен.
Для полноценной работы «в кластере» также установите --deploy-mode=cluster
Есть ли способ указать удаленную пряжу?
Как уже упоминалось, это настроено из yarn-site.xml
для предоставления местоположения менеджера ресурсов.
как настроить SparkSession.builder.master()? Это URL-адрес только для hdfs:// URL-адрес порта 9000
Нет. Менеджер ресурсов YARN имеет собственный протокол RPC, а не hdfs://
... Однако вы можете использовать spark.read("hdfs://namenode:port/path")
для чтения файлов HDFS. Как уже упоминалось, .master('yarn')
или --master yarn
— это единственные нужные вам конфигурации, специфичные для Spark.
Если вы хотите использовать контейнеры Docker, YARN поддерживает это, но мастер Spark Kubernetes будет проще настроить, и вы можете использовать Hadoop Ozone или MinIO, а не HDFS в Kubernetes.
Чтобы уточнить, вам не нужен YARN, чтобы иметь файл XML. Вы можете просто скопировать файл в контейнер и установить CONF env-var
Да, это именно то, что я сделал. Я только что создал файл и запустил контейнер с указанием на него HADOOP_CONF_DIR. Мне также пришлось изменить права доступа к каталогу /opt/spark, так как разрешение по умолчанию — root, а при запуске — не root, но в остальном теперь он взаимодействует с кластером. Спасибо!
Прохладный. Не стесняйтесь принять ответ, используя галочку рядом с сообщением
Все это имеет смысл, спасибо! Я пытался быть очень умным и отправить искру из док-контейнера, созданного из официального образа искры apache. Однако на этом изображении нет пряжи и, следовательно, нет пряжи-site.xml. Получив это и настроив HADOOP_CONF_DIR в контейнере, я смог запустить свой файл в кластере.