Настройка Apache Spark
profiles.yml предназначен только для dbt Core и dbt FusionЕсли вы используете dbt platform, вам не нужно создавать файл profiles.yml. Этот файл требуется только в том случае, если вы используете dbt Core или dbt Fusion локально. Чтобы узнать больше о требованиях к Fusion, см. раздел Supported features. Чтобы подключить вашу платформу данных к dbt, см. раздел About data platforms.
dbt-databricksЕсли вы используете Databricks, рекомендуется использовать адаптер dbt-databricks вместо dbt-spark. Если вы все еще используете dbt-spark с Databricks, рассмотрите возможность миграции с адаптера dbt-spark на адаптер dbt-databricks.
Для версии этой страницы для Databricks обратитесь к разделу Настройка Databricks.
- Поддерживается: dbt Labs
- Авторы: core dbt maintainers
- Репозиторий GitHub: dbt-labs/dbt-adapters
- Пакет PyPI:
dbt-spark - Канал в Slack: db-databricks-and-spark
- Поддерживаемая версия dbt Core: v0.15.0 и новее
- Поддержка dbt: Supported
- Минимальная версия платформы данных: n/a
Установка dbt-spark
Установите адаптер с помощью pip. До версии 1.8 установка адаптера автоматически устанавливала dbt-core и любые дополнительные зависимости. Начиная с 1.8 установка адаптера не устанавливает dbt-core автоматически. Это потому, что версии адаптеров и dbt Core были развязаны, и мы больше не хотим перезаписывать существующие установки dbt-core.
Используйте следующую команду для установки:
python -m pip install dbt-core dbt-spark
Настройка dbt-spark
Конфигурацию, специфичную для Spark, см. на странице настроек Spark.
Если вы подключаетесь к Databricks через ODBC-драйвер, потребуется pyodbc. В зависимости от вашей системы, вы можете установить его отдельно или через pip. Подробности установки для различных ОС смотрите в wiki pyodbc.
Если вы подключаетесь к Databricks через ODBC-драйвер, потребуется библиотека pyodbc. В зависимости от вашей системы вы можете установить её отдельно или через pip. Подробности установки для разных операционных систем смотрите на странице вики pyodbc.
Если вы подключаетесь к кластеру Spark через общие методы thrift или http, потребуется PyHive.
# odbc соединения
$ python -m pip install "dbt-spark[ODBC]"
# thrift или http соединения
$ python -m pip install "dbt-spark[PyHive]"
# session соединения
$ python -m pip install "dbt-spark[session]"
Настройка dbt-spark
Для конфигурации, специфичной для Spark, обратитесь к Конфигурация Spark
Для получения дополнительной информации обратитесь к репозиторию GitHub: dbt-labs/dbt-adapters
Методы подключения
dbt-spark может подключаться к кластерам Spark четырьмя различными методами:
-
odbc— предпочтительный метод при подключении к Databricks. Он поддерживает подключение к SQL Endpoint или к универсальному интерактивному кластеру. -
thrift— подключается напрямую к ведущему (lead) узлу кластера, развернутого локально / on‑premise или в облаке (например, Amazon EMR). -
http— более универсальный метод подключения к управляемому сервису, который предоставляет HTTP‑endpoint. В настоящее время это включает подключения к интерактивному кластеру Databricks. -
session— подключается к pySpark‑сессии, запущенной локально или на удалённой машине.
Метод подключения session предназначен для опытных пользователей и экспериментальной разработки в dbt. Этот метод подключения не поддерживается в dbt.
:::
ODBC
Используйте метод подключения odbc, если вы подключаетесь к SQL endpoint или интерактивному кластеру Databricks через ODBC-драйвер. (Скачайте последнюю версию официального драйвера здесь.)
your_profile_name:
target: dev
outputs:
dev:
type: spark
method: odbc
driver: [path/to/driver]
schema: [database/schema name]
host: [yourorg.sparkhost.com]
organization: [org id] # Только для Azure Databricks
token: [abc123]
# один из:
endpoint: [endpoint id]
cluster: [cluster id]
# опционально
port: [port] # по умолчанию 443
user: [user]
server_side_parameters:
"spark.driver.memory": "4g"
Thrift
Используйте метод подключения thrift, если вы подключаетесь к Thrift‑серверу, который находится перед кластером Spark, например к кластеру, запущенному локально или в Amazon EMR.
your_profile_name:
target: dev
outputs:
dev:
type: spark
method: thrift
schema: [database/schema name]
host: [hostname]
# опционально
port: [port] # по умолчанию 10001
user: [user]
auth: [например, KERBEROS]
kerberos_service_name: [например, hive]
use_ssl: [true|false] # значение параметра hive.server2.use.SSL, по умолчанию false
server_side_parameters:
"spark.driver.memory": "4g"
HTTP
Используйте метод http, если ваш Spark‑провайдер поддерживает универсальные подключения по HTTP (например, интерактивный кластер Databricks).
your_profile_name:
target: dev
outputs:
dev:
type: spark
method: http
schema: [database/schema name]
host: [yourorg.sparkhost.com]
organization: [org id] # Только для Azure Databricks
token: [abc123]
cluster: [cluster id]
# опционально
port: [port] # по умолчанию: 443
user: [user]
connect_timeout: 60 # по умолчанию 10
connect_retries: 5 # по умолчанию 0
server_side_parameters:
"spark.driver.memory": "4g"
Интерактивные кластеры Databricks могут запускаться несколько минут. Вы можете включить опциональные конфигурации профиля connect_timeout и connect_retries, и dbt будет периодически пытаться повторно подключиться.
Session
Используйте метод session, если вы хотите запускать dbt против pySpark сессии.
your_profile_name:
target: dev
outputs:
dev:
type: spark
method: session
schema: [database/schema name]
host: NA # не используется, но требуется `dbt-core`
server_side_parameters:
"spark.driver.memory": "4g"
Опциональные конфигурации
Повторы
Периодические ошибки могут возникать неожиданно при выполнении запросов к Apache Spark. Если retry_all включен, dbt-spark будет наивно повторять любой запрос, который завершился неудачей, основываясь на конфигурации, заданной connect_timeout и connect_retries. Он не пытается определить, была ли ошибка запроса временной или вероятно успешной при повторе. Эта конфигурация рекомендуется в производственных средах, где запросы должны выполняться успешно.
Например, это укажет dbt повторять все неудачные запросы до 3 раз с задержкой в 5 секунд между каждой попыткой:
retry_all: true
connect_timeout: 5
connect_retries: 3
Конфигурация на стороне сервера
Spark может быть настроен с использованием Свойств приложения. Используя эти свойства, выполнение может быть настроено, например, для выделения большего объема памяти процессу драйвера. Также, через эти свойства можно настроить выполнение Spark SQL. Например, это позволяет пользователю установить каталоги Spark.
Предостережения
При возникновении трудностей запустите poetry run dbt debug --log-level=debug. Логи сохраняются в logs/dbt.log.
Использование с EMR
Чтобы подключиться к Apache Spark, работающему на кластере Amazon EMR, вам нужно будет запустить sudo /usr/lib/spark/sbin/start-thriftserver.sh на главном узле кластера, чтобы запустить Thrift-сервер (подробнее см. в документации). Вам также нужно будет подключиться к порту 10001, который подключится к Thrift-серверу Spark; порт 10000 вместо этого подключится к Hive-серверу, что не будет работать корректно с dbt.
Поддерживаемая функциональность
Большая часть функциональности dbt Core поддерживается, однако некоторые возможности доступны только в Delta Lake (Databricks).
Функции, доступные только в Delta:
- Инкрементальные обновления моделей по
unique_keyвместоpartition_by(см. стратегиюmerge) - Снимки
- Сохранение описаний на уровне столбцов в виде комментариев в базе данных
Пространство имен по умолчанию с методом подключения Thrift
Для выполнения запросов метаданных в dbt вам нужно иметь пространство имен с именем default в Spark при подключении с помощью Thrift. Вы можете проверить доступные пространства имен, используя pyspark и выполнив spark.sql("SHOW NAMESPACES").show(). Если пространство имен по умолчанию не существует, создайте его, выполнив spark.sql("CREATE NAMESPACE default").show().
Если возникнет проблема с сетевым подключением, ваши логи отобразят ошибку, такую как Could not connect to any of [('127.0.0.1', 10000)] (или что-то подобное).