Миграция данных из MariaDB в Parquet с помощью Apache NiFi
В предыдущей статье Практическое введение в Apache NiFi были рассмотрены базовые концепции NiFi, его место в ETL‑процессах и принципы построения потоков данных.
Здесь мы разберем практический batch‑сценарий: выгрузка данных из MariaDB и сохранение их в виде файла в формате Parquet.
Это типовая задача при построении аналитических конвейеров, data lake и оффлайн‑обработки данных.
Почему Parquet
Parquet - колоночный формат хранения данных, оптимизированный для аналитических нагрузок. Он имеет эффективное сжатие, хранит данные в виде столбцов, имеет хорошую интеграцию с аналитическими движками, например, Spark, Trino, Presto и др. Поэтому Parquet часто используется как выходной формат batch‑выгрузок из OLTP‑баз.
Общая схема потока
В статье используется минимальный, но показательный набор процессоров:
[ExecuteSQL]
|
v
[ConvertRecord]
|
v
[PutFile]
Где:
- ExecuteSQL - извлекает данные из MariaDB;
- ConvertRecord - преобразует записи в формат Parquet;
- PutFile - сохраняет результат в файловую систему.
Каждый запуск потока формирует один Parquet‑файл.
Исходные данные
Для примера используется таблица со структурой как в предыдущей статье:
CREATE TABLE `ArticleDocuments` (
`Id` INT(11) NOT NULL AUTO_INCREMENT,
`Content` LONGTEXT NOT NULL COLLATE 'utf8mb4_general_ci',
PRIMARY KEY (`Id`)
) COLLATE='utf8mb4_general_ci' ENGINE=InnoDB;
Дополнительные колонки намеренно не используются, чтобы пример оставался максимально наглядным.
Настройка процессоров
ExecuteSQL
Назначение: выполнение SQL‑запроса и получение результата в виде records.
Ключевые настройки:
- Database Connection Pooling Service:
MariaDBConnectionPool - SQL select query:
SELECT Id, Content FROM ArticleDocuments
Особенности:
- результат запроса преобразуется в Avro‑представление;
- каждая строка таблицы становится record;
- в данном примере на выходе формируется один FlowFile.
В данном примере RecordReader не используется, так как ExecuteSQL сам формирует Avro‑контент.
ConvertRecord
Назначение: преобразование данных из Avro в Parquet.
Используемая конфигурация:
- Record Reader:
AvroReader - Record Writer:
ParquetRecordSetWriter
Ключевая идея:
ConvertRecord - это явная и контролируемая точка преобразования форматов данных.
Преимущества такого подхода:
- отделение извлечения данных от формата хранения;
- явная схема;
- возможность легко менять выходной формат.
⚠️ Важно: ParquetRecordSetWriter не работает «из коробки» без дополнительных NAR‑модулей.
PutFile
Назначение: сохранение Parquet‑файла на диск.
Ключевые настройки:
- Directory:
/result/article_documents - Conflict Resolution Strategy:
replace
Если PutFile работает постоянно, то NiFi будет повторно запускать ExecuteSQL и создавать несколько файлов с одинаковым содержимым.
Поэтому рекомендуется использовать однократный запуск потока (Run Once).
Controller Services
MariaDBConnectionPool
Настройки подключения к базе данных MariaDB:
- Database Connection URL:
jdbc:mariadb://mariadb:3306/article - Database Driver Class Name:
org.mariadb.jdbc.Driver - Database Driver Locations:
/opt/nifi/nifi-current/drivers/org.mariadb.jdbc_mariadb-java-client-3.3.3.jar - Database User:
root
AvroReader
Используется без дополнительных настроек. Схема автоматически извлекается из Avro‑контента, полученного от ExecuteSQL.
ParquetRecordSetWriter
Для работы ParquetRecordSetWriter необходимо подключить NAR‑модули:
nifi-parquet-nar-2.7.2.narnifi-hadoop-libraries-nar-2.7.2.nar
Модули можно скачать в репозитории Maven. Версия модуля должна соответствовать версии Apache NiFi. Для подключения NAR‑модулей в docker-контейнер можно использовать следующий Dockerfile для сборки образа:
FROM apache/nifi:2.7.2
# Parquet NAR
COPY nifi/nars/*.nar /opt/nifi/nifi-current/nar_extensions/
# MariaDB JDBC driver
COPY nifi/drivers/org.mariadb.jdbc_mariadb-java-client-3.3.3.jar \
/opt/nifi/nifi-current/drivers/
Только после добавления NAR‑модулей ParquetRecordSetWriter станет доступен в списке Writer‑ов.
Проверка результата
После выполнения потока:
- В каталоге
/result/article_documentsпоявляется.parquet‑файл - Его можно открыть с помощью:
- Spark
- DuckDB
- Parquet Viewer
- Pandas / PyArrow
Методические замечания
- NiFi отлично подходит для batch‑миграций;
- для production‑сценариев стоит контролировать размеры файлов, учитывать идемпотентность, обрабатывать возможные ошибки в отдельных процессорах.
Заключение
Связка ExecuteSQL → ConvertRecord → PutFile позволяет без написания кода выгружать данные из MariaDB в формат Parquet.
Apache NiFi в этом сценарии выступает как транспортный и интеграционный слой, подготавливая данные для дальнейшей аналитической обработки.
Помимо Apache NiFi, экспорт данных из MariaDB в формат Parquet может быть выполнен и с помощью других инструментов, таких как DuckDB, Apache Spark и ELT-платформы, выбор которых зависит от объема данных, требований к инфраструктуре и сложности интеграционного сценария.
Формат Parquet делает такие выгрузки удобными и эффективными для работы в экосистеме Big Data.