«Смысл» данной статьи
В данной статье описываются технологии, использованные для построения полнофункционального 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.
Планы на будущее
Эта статься является вводной и описывает использованные технологии. В следующих задачах планируется реализация бизнес функциональности с помощью описанных технологий.

Комментарии 0