Перейти к основному содержимому

Настройка Apache Spark

Файл profiles.yml предназначен только для dbt Core и dbt Fusion

Если вы используете dbt platform, вам не нужно создавать файл profiles.yml. Этот файл требуется только в том случае, если вы используете dbt Core или dbt Fusion локально. Чтобы узнать больше о требованиях к Fusion, см. раздел Supported features. Чтобы подключить вашу платформу данных к dbt, см. раздел About data platforms.

Если вы используете Databricks, используйте 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‑сессии, запущенной локально или на удалённой машине.

Advanced functionality

Метод подключения session предназначен для опытных пользователей и экспериментальной разработки в dbt. Этот метод подключения не поддерживается в dbt.

:::

ODBC

Используйте метод подключения odbc, если вы подключаетесь к SQL endpoint или интерактивному кластеру Databricks через ODBC-драйвер. (Скачайте последнюю версию официального драйвера здесь.)

~/.dbt/profiles.yml
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.

~/.dbt/profiles.yml
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).

~/.dbt/profiles.yml
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 сессии.

~/.dbt/profiles.yml
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 секунд между каждой попыткой:

~/.dbt/profiles.yml
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:

  1. Инкрементальные обновления моделей по unique_key вместо partition_by (см. стратегию merge)
  2. Снимки
  3. Сохранение описаний на уровне столбцов в виде комментариев в базе данных

Пространство имен по умолчанию с методом подключения 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)] (или что-то подобное).

Нашли ошибку?

0
Loading