С помощью этого руководства вы настроите подключение DBT к инстансу Managed Spark с использованием Spark Connect. Вы запустите DBT-проект в VS Code Server на интерактивном ноутбуке и подключите его к данным, расположенным в бакете Object Storage.
Вы будете использовать следующие сервисы:
Managed Spark — сервис, который позволяет развернуть кластерное вычислительное решение на основе Apache Spark для распределенной обработки данных.
Notebooks — сервис для запуска сред ML и работы DS-специалистов в ноутбуках на платформе Evolution.
Шаги:
Если вы уже зарегистрированы, войдите под своей учетной записью.
Создайте кластер Data Platform, в котором будут размещены инстансы.
Создайте бакет Object Storage с названием dbt-labs.
В бакете создайте папку raw.
Скачайте файл с данными orders.csv и загрузите его в папку raw.
Создайте инстанс Managed Metastore. Он необходим для управления метаданными о таблицах, загруженных в Object Storage.
В блоке Источник выберите Object Storage.
В поле Путь до warehouse укажите бакет dbt-labs.
Создайте инстанс Managed Spark. В блоке Настройки доступа активируйте опцию Подключить публичный хост.
Дождитесь, когда статус инстанса Managed Spark сменится на «Готов».
Создайте Spark Connect. Активируйте опцию Добавить Spark конфигурацию (–conf) и укажите следующие параметры и их значения:
Аргумент | Значение |
|---|---|
spark.sql.catalogImplementation | hive |
spark.sql.warehouse.dir | s3a://dbt-labs/ |
spark.hadoop.hive.metastore.uris | Thrift URL из карточки созданного ранее инстанса Managed Metastore |
Создайте API-ключ. В поле Сервисы выберите Evolution Data Platform. Сохраните значение API-ключа, после закрытия окна получить его будет нельзя.
Создайте секрет. В поле Значение секрета выберите Стандартный режим и введите сохраненное ранее значение API-ключа.
Создайте ноутбук на основе базового образа VSCode-Server.
В блоке Окружение и данные добавьте следующие переменные и их значения:
Ключ | Значение |
|---|---|
host | Публичный хост из карточки созданного ранее инстанса Managed Spark |
port | 443 |
В блоке Окружение и данные добавьте переменную с секретом.
В поле Ключ введите apikey.
В поле Секрет выберите созданный ранее секрет.
На этом шаге вы с помощью терминала создадите и настроите виртуальное окружение, установите необходимые зависимости и сертификаты.
Откройте терминал: нажмите и выберите View → Terminal.
Создайте рабочую папку dbt:
mkdir dbt
В папке dbt создайте файл requirements.txt со следующим содержимым:
dbt-spark==1.9.3pyspark[connect]==3.5.4pandas>=1.0.5pyarrow>=4.0.0grpcio>=1.48.1ipykernel>=7.2.0
Создайте виртуальное окружение:
python -m venv .venv
Активируйте виртуальное окружение:
source .venv/bin/activate
Установите зависимости:
pip install -r requirements.txt
Скачайте корневой сертификат:
mkdir ./certs && wget -O ./certs/dp_cert.crt https://xbox.cloud.ru/index.php/s/wEso6nB7bKYxkkf/download --no-check-certificate
Добавьте путь к сертификату в переменную окружения:
export GRPC_DEFAULT_SSL_ROOTS_FILE_PATH=/home/jovyan/dbt/certs/dp_cert.crt
На этом шаге вы с помощью скрипта запустите Spark Connect и создадите таблицу Hive Metastore.
В папке dbt создайте файл spark_connect.ipynb.
В файле spark_connect.ipynb добавьте ячейку и вставьте в нее скрипт для создания Spark Connect:
import osfrom pyspark.sql import SparkSessionhost = os.environ["host"]port = os.environ["port"]apikey = os.environ["apikey"]os.environ["GRPC_DEFAULT_SSL_ROOTS_FILE_PATH"] = "./certs/dp_cert.crt"spark = SparkSession.builder.remote(f"sc://{host}:{port}/;use_ssl=true;x-api-key={apikey}").getOrCreate()
Запустите код в ячейке.
Добавьте вторую ячейку и вставьте в нее скрипт для создания внешней таблицы:
# Создайте базу данных в hive metastorespark.sql("CREATE DATABASE IF NOT EXISTS raw")# Создайте внешнюю таблицу, для чтения данных из ObjectStoragespark.sql("""CREATE EXTERNAL TABLE IF NOT EXISTS raw.orders (order_id INT,order_date DATE,customer_id STRING,product STRING,category STRING,quantity INT,unit_price DOUBLE)USING CSVOPTIONS (path 's3a://dbt-labs/raw/',delimiter ',',header 'true')""")# Проверьте, что данные доступныspark.sql("SELECT * FROM raw.orders").show(truncate=False)
Запустите код во второй ячейке.
На этом шаге вы настроите параметры проекта и создадите источники данных и DBT-модели.
В терминале выполните команду:
dbt init dbt_spark_lab --profiles-dir .
В диалоге настройки укажите следующие значения параметров:
Which database would you like to use? — spark.
Host — locahost.
Desired authentication method option — thrift.
Port — 443.
Schema (default schema that dbt will build objects in) — default.
Threads — 1.
Откройте файл /dbt_spark_lab/profiles.yml. В строке method: thrift замените thrift на session.
Подготовьте папку /dbt_spark_lab/models/:
Удалите папку example и файл schema.yml.
Загрузите файл sources.yaml.
Cоздайте папку /dbt_spark_lab/models/marts.
Загрузите файл marts_sales_by_category.sql в папку /dbt_spark_lab/models/marts.
На этом шаге вы запустите построение DBT-проекта.
В терминале перейдите в папку /dbt_spark_lab :
cd dbt_spark_lab
Создайте переменную окружения для подключения к Spark Connect:
export SPARK_REMOTE="sc://${host}:${port}/;use_ssl=true;x-api-key=${apikey}"
Запустите DBT-проект:
dbt build
На этом шаге вы проверите работу DBT с помощью запроса к внешней таблице.
Перейдите в файл spark_connect.ipynb.
Добавьте ячейку и выполните запрос:
spark.sql("SELECT * FROM marts_sales_by_category").show(truncate=False)
Вы научились настраивать подключение к инстансам Managed Spark и Managed Metastore и запускать DBT-проекты на интерактивном ноутбуке.