«Смысл» данной статьи

В данной статье описываются технологии, использованные для построения полнофункционального ETL на базе Apache Spark. Статья планируется как первая в цикле статей о решении бизнес проблем с помощью созданного ETL с использованием существующих Open-Source решений.

Описание

Ниже описывается решение задач ETL (Extract Transform Loading) средствами Apache Spark с выносом конфигурации базовых преобразований в файлы формата YAML и сохранением возможности реализовывать сложные преобразования путем написания скриптов на PySpark.

Apache Spark используется в режиме Spark Connect. Это упрощает взаимодействие с ядра ETL с Apache Spark.

Apache Spark выбран в силу своей распространенности и большому числу форматов источников и мест назначения данных.

Исходный код проекта доступен в репозитории на GitHub.

Очень краткая документация расположена на сайте github.io. Документация создана с помощью проекта Docusaurus, описание Docusaurus не входит в тему данной статьи.

Быстрый запуск проекта в окружении Docker описан на сайте документации проекта.

Использованные технологии

Docker

Созданное решение полностью работоспособно и может быть запущено в Docker через docker-compose файл.

Ядро ETL

Преобразования данных делаются средствами Apache Spark.

Конфигурации преобразований

ETL преобразования в проекте описываются в YAML-файле, базовый пример. На одно преобразование создается один файл конфигурации.

Простые/базовые преобразования

Простые/базовые преобразования делаются с помощью описания их в файле конфигурации в разделе column_modifications.

Сложные или бизнес преобразования

Сложные преобразования данных, другими словами, бизнес-преобразования реализуются путем создания Python класса, с методом имеющим любое имя, но принимающим на вход Apache Spark DataFrame и возвращающим обратно DataFrame, пример.

Созданный класс должен быть описан в YAML файле конфигурации преобразования в разделе business_modification‎.

Серверная часть Apache Spark

Apache Spark в проекте запускается в режиме Spark Connect. Пример запуска Apache Spark в режиме Connect описан в docker-compose.

Запуск преобразований

Хотя преобразования описываются в YAML файлах, их нужно преобразовать и отправить на выполнение в Apache Spark. В проекте этим занимается Python.

Запустить можно преобразования можно или путем запуска Python файла с параметров в виде пути к файлу конфигурации, или путем отправки файла конфигураций на FastAPI сервер, запускаемый из docker-compose. После запуска FastAPI сервера он доступен по локальному адресу http://localhost:8090/.

Более детально запуск преобразований описан на сайте документации.

Технологии источников и мест назначения преобразованных данных

Apache Spark позволяет использовать множество различных технологий для источников и мест сохранения преобразованных данных. В базовом примере показывается, как преобразовать CSV в линейный JSON.

Второй базовый пример показывает, как исходный файл в формате XML сохранить в базу данных.

Технологии отображения информации

Простой табличный просмотр

Для простого контроля результатов ETL преобразований в docker-compose включено приложение Prisma Studio. После запуска docker-compose Prisma Studio будет доступно по локальному адресу http://localhost:8089/

Создание сложных отчетов и графиков

Для создания сложных отчетов и графиков в проект включено приложение Apache Superset, которое доступно по локальному адресу http://localhost:8088/

Хранение результатов преобразований

В качестве основного места хранения результатов преобразований данных выбрана БД Postgres. Используя Postgres как источник, можно легко создавать отчеты средствами Apache Superset.

Преимущества, которые дает описанное решение

Благодаря использованию Open-Source компонентов строится полнофункциональное ETL решение для преобразования как небольших, так и огромных объемов данных.

Создание простых преобразований данных делается путем описания их в YAML файлах и не требует знаний в программировании. Необходимы только базовые знания о SQL функциях.

Возможно построение сложных преобразований данных, комбинируя их с простыми путем написания кода на Python/PySpark.

Планы на будущее

Эта статься является вводной и описывает использованные технологии. В следующих задачах планируется реализация бизнес функциональности с помощью описанных технологий.