🎯 Definicja

Apache Hudi (skrót od Hadoop Upserts Deletes and Incrementals), wymawiany „Hoodie”, to silnik zarządzania danymi oraz warstwa tablic nad jeziorem danych (Data Lake Table Format), zaprojektowany z myślą o obsłudze przetwarzania danych typu upsert, time-travel, inkrementalnego przetwarzania i wersjonowania danych bezpośrednio na formacie kolumnowym (np. Parquet).

Projekt został zapoczątkowany w Uberze w 2016 roku i zapewnia ACID, merge-on-read, write-once-read-many semantyki w środowiskach takich jak Apache Spark, Amazon EMR, Presto, Trino, Flink i Hive.

🔑 Kluczowe punkty

  • Obsługuje operacje in-place update, delete, upsert na danych w formacie jeziora.
  • Zbudowany jako Data Lake Table Format podobnie jak Apache Iceberg i Delta Lake.
  • Dostarcza pełną historię zmian oraz możliwość odczytu z konkretnego punktu w czasie (time travel).
  • Wspiera tryby zapisu: Copy-on-write (COW) i Merge-on-read (MOR).
  • Pracuje bezpośrednio z formatem plików Parquet oraz Avro.

📚 Szczegółowe wyjaśnienie

Główne funkcje Apache Hudi

  • ACID: zapewnia transakcyjność zapisu danych w jeziorku – nawet przy współbieżnych sesjach.
  • 🔁 Upsert/delete: modyfikujesz — nie tylko dopisujesz — dane w Data Lake.
  • 🕓 Time travel: odczyt danych z określonego commita, timestampu lub wersji (as.of.instant).
  • Inkrementalne odczyty (incremental pull): tylko te dane, które uległy zmianie między zapisami.
  • 💾 Write-once / Read-optimized: różne tryby zapisu dostosowane do przypadku użycia.

Tryby zapisu

TrybOpis
Copy-on-WriteZa każdym razem powstaje nowy plik Parquet z wersją danych (łatwiejszy odczyt, większe zużycie zasobów przy zapisie)
Merge-on-ReadDane są rozdzielone: plik bazowy + log (commit), odczyt wymaga składania danych z logów (tańszy zapis, złożony odczyt)

Integracje i obsługiwane narzędzia

  • Apache Spark (natywnie, poprzez HoodieWriteClient)
  • Apache Flink i Flink SQL
  • Apache Hive, Trino, Presto – dzięki tabelom katalogowym kompatybilnym z Hive Metastore
  • Amazon EMR, GCP Dataproc, Databricks (niestandardowo)
  • Apache Airflow / Dagster – w pipeline’ach orkiestracyjnych

Apache Hudi vs Delta Lake vs Iceberg

CechaApache HudiDelta LakeApache Iceberg
Wsparcie upsert/delete✅ Tak✅ Tak✅ Tak
Time Travel✅ Tak✅ Tak✅ Tak
Format plikówParquet, AvroParquetParquet, ORC, Avro
Metadata catalogHive Metastore / własnyDelta Log / LMWłasny metastore + Glue
Write modesCOW / MORCOWSnapshot-based
Trudność wdrożeniaŚredniaNiskaWysoka

💡 Przykład zastosowania

Zespół danych w firmie transportowej rejestruje miliardy zdarzeń z aplikacji mobilnej. Za pomocą Apache Hudi tworzy system Lakehouse z pełną historią aktualizacji danych o kursach i użytkownikach. Dzięki trybowi MOR mogą tanio dopisywać aktualizacje stanu zamówień, a analitycy mogą korzystać z widoków logicznych bez przetwarzania całości danych.

📌 Źródła

👽 Brudnopis

  • Merge-on-read ≠ tylko append – może „symulować” update
  • Hudi = ACID + upsert + time-travel przy zachowaniu lekkości lake’a
  • Obsługa partition pruning, incremental pull ≠ dostępne w Parquecie bez metadanych
  • Przewaga nad czystym Parquet → story-aware logika
  • Naming: HoodieTable, HoodieCommit, instants
  • Spark jobs = commit log i tracking wersji
  • Wybierz: Hudi – streaming & write-heavy, Delta – analytics & ETL, Iceberg – modularity & catalog