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.