Нужно ли иметь Spark на всех рабочих машинах для запуска spark-submit и запуска задания spark в кластере k8s на тех же рабочих машинах? - PullRequest
0 голосов
/ 28 января 2020

У меня есть кластер k8s. Теперь я хочу развернуть работу spark в кластере k8s, и мне интересно, нужно ли мне устанавливать и настраивать spark на всех рабочих машинах или нет.

1 Ответ

1 голос
/ 29 января 2020

Как я понимаю, это зависит от того, какой режим вы будете использовать.

Вы можете использовать Cluster Mode для запуска Spark Pi.

$ ./bin/spark-submit \
    --master k8s://https://<k8s-apiserver-host>:<k8s-apiserver-port> \
    --deploy-mode cluster \
    --name spark-pi \
    --class org.apache.spark.examples.SparkPi \
    --conf spark.executor.instances=5 \
    --conf spark.kubernetes.container.image=<spark-image> \
    local:///path/to/examples.jar

Spark master, заданный либо путем передачи аргумента командной строки --master в spark-submit, либо путем установки spark.master в конфигурации приложения, должен быть URL-адресом в формате k8s://<api_server_host>:<k8s-apiserver-port>. Порт всегда должен быть указан, даже если это HTTPS-порт 443. Префикс главной строки с k8s:// приведет к запуску приложения Spark в кластере Kubernetes, а с сервером API будет установлено соединение api_server_url. Если в URL не указан протокол HTTP, по умолчанию используется значение https. Например, установка мастера на k8s://example.com:443 эквивалентна установке на k8s://https://example.com:443, но для подключения без TLS на другом порту мастер будет установлен на k8s://http://example.com:8080.

В режиме Kubernetes, имя приложения Spark, которое задается spark.app.name или аргументом --name для spark-submit, по умолчанию используется для именования ресурсов Kubernetes, созданных как драйверы и исполнители. Таким образом, имена приложений должны состоять из строчных букв c символов, - и . и должны начинаться и заканчиваться символом алфавита c.

Вы также можете настроить Client Mode

Начиная с Spark 2.4.0, можно запускать приложения Spark на Kubernetes в режиме клиента. Когда ваше приложение работает в режиме клиента, драйвер может работать внутри модуля или на физическом хосте. При запуске приложения в режиме клиента рекомендуется учитывать следующие факторы:

Работа в режиме клиента

Исполнители Spark должны иметь возможность подключаться к драйверу Spark через имя хоста и порт это маршрутизируемый от исполнителей Spark. Конкретная c сетевая конфигурация, которая потребуется Spark для работы в режиме клиента, зависит от конфигурации. Если вы запускаете свой драйвер в модуле Kubernetes, вы можете использовать безголовый сервис , чтобы ваш модуль драйвера мог маршрутизироваться от исполнителей по стабильному имени хоста. При развертывании вашей автономной службы убедитесь, что селектор меток службы будет соответствовать только пакету драйвера и никаким другим пакетам; Рекомендуется назначить вашему модулю драйвера достаточно уникальную метку и использовать эту метку в селекторе меток службы безголового доступа. Укажите имя хоста драйвера через spark.driver.host, а порт вашего драйвера искры - spark.driver.port. ...

Вся документация, касающаяся запуска Spark в Kubernetes, доступна здесь .

Также есть хорошее объяснение, данное Gigaspaces о Работа в Spark в Куберне

...