Apache Hudi (сокращение от “Hadoop Upserts, Deletes, Incrementals”) — это открытый фреймворк, разработанный для эффективного управления транзакциями и инкрементальным обновлением данных в Data Lake.
Hudi предоставляет возможность эффективно и безопасно выполнять операции insert, update, delete (upserts/deletes) в файловых хранилищах, таких как HDFS, Amazon S3, Azure Data Lake, GCS и др.
📌 Основные проблемы, которые решает Apache Hudi
Apache Hudi был создан для решения следующих задач:
- ✅ Поддержка транзакций (ACID) в Data Lake.
- ✅ Инкрементальные обновления данных (вместо batch-перезаписи).
- ✅ Поддержка операций обновления и удаления (upsert/delete).
- ✅ Поддержка инкрементальной обработки данных (incremental processing).
Раньше эти возможности были доступны только в реляционных базах данных или Data Warehouse.
🛠️ Ключевые возможности Apache Hudi
1️⃣ Upserts (Insert + Update)
Позволяет эффективно выполнять вставки и обновления без полной перезаписи данных:
- Каждая строка идентифицируется уникальным ключом.
- Обновления происходят быстро и безопасно.
Пример использования (Spark):
df.write.format("hudi")
.option("hoodie.datasource.write.operation", "upsert")
.option("hoodie.datasource.write.recordkey.field", "id")
.save("/data/hudi/table")
2️⃣ Deletes (удаление записей)
Безопасное удаление данных на уровне строк без переписывания всего датасета:
df.write.format("hudi")
.option("hoodie.datasource.write.operation", "delete")
.option("hoodie.datasource.write.recordkey.field", "id")
.save("/data/hudi/table")
3️⃣ Incremental Queries (инкрементальные запросы)
Эффективное чтение только новых или изменённых данных с момента последнего запроса (incremental processing):
spark.read.format("hudi")
.option("hoodie.datasource.query.type", "incremental")
.option("hoodie.datasource.read.begin.instanttime", "20240226120000")
.load("/data/hudi/table")
4️⃣ Поддержка транзакций (ACID)
Apache Hudi полностью поддерживает ACID-транзакции, гарантируя атомарность, согласованность, изоляцию и долговечность изменений:
- Изменения применяются атомарно.
- Согласованность гарантируется за счёт использования commit-логов.
- Безопасность данных и транзакций обеспечивается за счёт метаданных.
5️⃣ Версионирование и Time-travel
Apache Hudi хранит исторические версии данных, позволяя выполнять запросы в прошлое (Time-travel):
spark.read.format("hudi")
.option("as.of.instant", "20240226110000")
.load("/data/hudi/table")
📌 Как устроен Apache Hudi внутри?
Hudi организует данные и изменения следующим образом:
- Базовые файлы данных (Base Files): Parquet-файлы с данными.
- Логи изменений (Delta Logs): Avro-файлы, которые хранят инкрементальные изменения (updates/deletes).
Hudi поддерживает два режима записи:
-
Copy-on-Write (CoW):
При каждом изменении перезаписываются базовые файлы целиком (оптимально для аналитики). -
Merge-on-Read (MoR):
Базовые файлы остаются неизменными, изменения записываются отдельно в логи изменений.
Данные объединяются при чтении, оптимально для частых обновлений.
📊 Примеры использования Hudi в реальных сценариях
Сценарий использования | Как Hudi помогает? |
---|---|
CDC (Change Data Capture) | Легко применять изменения из источников (например, Kafka или Debezium). |
Потоковая аналитика | Поддержка инкрементальных запросов для потоковой обработки данных. |
Политика персональных данных | Поддержка быстрого удаления данных (DELETE). |
Real-time dashboards | Быстрые и эффективные upserts и чтение инкрементальных данных. |
🚀 Преимущества Apache Hudi (итог):
-
🔥 Эффективные Upserts и Deletes:
Простые и быстрые обновления данных без переписывания всего датасета. -
⚡ Инкрементальная обработка:
Запросы только изменённых данных (incremental processing). -
✅ ACID-транзакции:
Гарантия согласованности и целостности данных. -
📅 Time-travel:
Поддержка истории изменений и откатов. -
🔄 Гибкость режимов работы (Merge-on-Read и Copy-on-Write).
🚩 Когда стоит выбрать Apache Hudi?
Используйте Apache Hudi, если:
- Вам нужна частая и эффективная запись (updates/deletes) в Data Lake.
- Важна поддержка инкрементальной обработки (например, streaming analytics, real-time dashboards).
- Необходима поддержка ACID-транзакций в Data Lake.
- Вы реализуете CDC или часто изменяете данные.
📌 Итоговый вывод (кратко):
Apache Hudi — это эффективный инструмент для управления транзакциями, инкрементальными обновлениями и удалениями в Data Lake, идеально подходящий для real-time аналитики и сценариев CDC.