Skip to content

Изменение настроек Spark сессии

SyncMaster Worker(рабочий процесс) создает SparkSession для каждого запуска. По умолчанию, SparkSession создается с параметрами master=local, всеми необходимыми .jar пакетами для конкретных типов БД/Файловых систем и ограничителем по ресурсам передачи данных.

Пользовательская настройка сессии Spark

Возможно изменить базовые Spark Session configuration_ настройки воркера:

config.yaml
worker:
    spark_session_default_config:
        spark.master: local
        spark.driver.host: 127.0.0.1
        spark.driver.bindAddress: 0.0.0.0
        spark.sql.pyspark.jvmStacktrace.enabled: true
        spark.ui.enabled: false

Например, для использования SyncMaster в Spark-on-K8s можно использовать образ рабочего процесса для контейнеров исполнителей Spark:

config.yaml
worker:
    spark_session_default_config:
        spark.master: k8s://https://kubernetes.default.svc
        spark.driver.host: service-for-spark-driver
        spark.driver.bindAddress: 0.0.0.0
        spark.driver.port: 10000
        spark.blockManager.port: 10001
        spark.kubernetes.authenticate.driver.serviceAccountName: spark
        spark.sql.pyspark.jvmStacktrace.enabled: true
        spark.kubernetes.container.image: mtsrus/syncmaster-worker:{TAG}

Note

В настоящее время Spark-on-K8s и Spark-on-Yarn не поддерживают взаимодействие по протоколам FTP, FTPS, SFTP, Samba и WebDAV. Для этого требуется sparm.master: local.

Фабрика пользовательских сессий Spark

Также можно использовать пользовательскую функцию, которая возвращает объект SparkSession:

config.yaml
worker:
    create_spark_session_function: my_worker.spark.create_custom_spark_session

Вот пример функции:

my_workers/spark.py
from syncmaster.db.models import Run
from syncmaster.dto.connections import ConnectionDTO
from syncmaster.worker.settings import WorkerSettings
from pyspark.sql import SparkSession

def create_custom_spark_session(
    run: Run,
    source: ConnectionDTO,
    target: ConnectionDTO,
    settings: WorkerSettings,
) -> SparkSession:
    # any custom code returning SparkSession object
      return SparkSession.builde.config(...).getOrCreate()

Модуль с пользовательской функцией следует размещать в том же образе Docker или виртуальной среде Python, что и рабочий процесс SyncMaster.