Spark Operator#
Spark Operator - инструмент, который использует пользовательские ресурсы Kubernetes для задания, запуска и отображения состояния приложений Spark.
Основные функции:
Включает декларативное определение приложений и управление приложениями за счет расширений Kubernetes API.
Автоматически запускает
spark-submitот имени пользователей для каждогоSparkApplication, который подлежит отправке.Предоставляет встроенную поддержку
cronдля запуска приложений.Поддерживает настройку pod
Sparkчерез вебхукmutating admission, например, подключениеConfigMapsи томов и настройкуaffinity/anti-affinitypod.Обеспечивает автоматическое повторное отправление обновленных объектов
SparkApplicationс обновленным определением.Реализует автоматический перезапуск приложений с настраиваемой политикой перезапуска.
Выполняет автоматические повторные попытки отправки объекта
SparkApplicationпри сбое с необязательным линейным откатом.Собирает и экспортирует метрики на уровне приложения и метрики
driver/executorв Prometheus.
Подготовка к установке#
Соберите образ Spark Operator путем добавления бинарного файла spark-operator к образу Apache spark:
Создайте docker-файл:
ARG SPARK_IMAGE=spark:3.5.1 # образ spark ARG SPARK_OPERATOR FROM ${SPARK_OPERATOR} AS spark_operator # образ dapp-spark-operator FROM ${SPARK_IMAGE} USER root RUN apt-get update \ && apt-get install -y tini \ && rm -rf /var/lib/apt/lists/* RUN mkdir -p /etc/k8s-webhook-server/serving-certs /home/spark && \ chmod -R g+rw /etc/k8s-webhook-server/serving-certs && \ chown -R spark /etc/k8s-webhook-server/serving-certs /home/spark USER spark COPY --from=spark_operator /spark-operator /usr/bin/spark-operator COPY entrypoint.sh /usr/bin/ ENTRYPOINT ["/usr/bin/entrypoint.sh"]Выполните:
docker build -t my-spark-operator: 2.0.2 --build-arg SPARK_IMAGE=your-spark-image SPARK_OPERATOR=dropapp-spark-operator-image .
Установка с помощью Helm#
Чтобы установить Spark Operator с помощью Helm:
Добавьте репозиторий Spark Operator:
helm repo add spark-operator <repoexample>/spark-operator/Где
<repoexample>в зависимости от размещения:ссылка на удаленный репозиторий;
путь к локальному репозиторию.
Для развертывания выполните:
helm install spark-operator spark-operator/spark-operator -n spark-operatorПример конфигурации:
apiVersion: sparkoperator.k8s.io/v1beta1 kind: SparkApplication metadata: name: spark-pod-example spec: type: Scala # Язык приложения (Scala, Python, Java и так далее) mode: cluster # Режим запуска (cluster или client) sparkVersion: "3.3.2" # Версия Spark image: "spark-operator/spark-py:3.3.2" # Docker-образ для Spark mainClass: org.apache.spark.examples.SparkPi # Главный класс приложения mainApplicationFile: "<repoexample>/spark-examples.jar" # Путь к файлу с приложением arguments: - "100" # Аргументы для приложения sparkProperties: spark.master: "k8s://https://kubernetes.default.svc" # Master URL для Kubernetes spark.executor.memory: "2g" # Память для executor spark.driver.memory: "2g" # Память для driver spark.executor.cores: "1" # Ядра для executor driver: cores: 1 # Ядра для driver memory: "2g" # Память для driver labels: version: "3.3.2" # Метки для driver executor: cores: 1 # Ядра для executor memory: "2g" # Память для executor labels: version: "3.3.2" # Метки для executor volumes: - name: spark-logs hostPath: path: /var/log/spark type: DirectoryУбедитесь, что pod
spark-piв пространстве именspark-operatorнаходятся в состоянииRunning:kubectl get pods -n spark-operator