Apache Hudi is designed for efficient data updates in a data lake. Ideal for CDC pipelines with frequent upserts.
Hudi — Upserts in a Data Lake¶
Uber developed Hudi for billions of records with frequent updates.
Zwei Tabellentypen¶
- Copy-on-Write — rewrites the file; optimal for reads
- Merge-on-Read — delta logs; optimal for writes
hudi_opts = {
'hoodie.table.name': 'orders',
'hoodie.datasource.write.recordkey.field': 'order_id',
'hoodie.datasource.write.precombine.field': 'updated_at',
'hoodie.datasource.write.operation': 'upsert',
}
df.write.format("hudi").options(**hudi_opts)\
.mode("append").save("/data/hudi/orders")
# Apache Hudi — Inkrementelle Verarbeitung im Data Lake
spark.read.format("hudi")\
.option("hoodie.datasource.query.type", "incremental")\
.load("/data/hudi/orders")
Wann Hudi einsetzen¶
Apache Hudi ist die ideale Wahl fuer Szenarien, in denen Sie bestehende Datensaetze in einem Data Lake regelmaessig aktualisieren muessen — beispielsweise die Synchronisation mit einer Produktionsdatenbank ueber CDC (Change Data Capture). Im Gegensatz zum traditionellen Ansatz, ganze Parquet-Dateien neu zu schreiben, ermoeglicht Hudi effiziente Upserts und inkrementelles Lesen nur der geaenderten Daten.
In der Praxis wird Hudi haeufig zusammen mit Debezium und Apache Kafka eingesetzt, wobei Debezium Aenderungen aus PostgreSQL oder MySQL erfasst und Hudi diese in S3 oder HDFS schreibt. Dank Timeline- und Rollback-Mechanismen bietet Hudi zudem Zuverlaessigkeit auf ACID-Transaktionsebene. Wenn Ihre Datenpipeline taeglich Millionen von Datensaetzen verarbeitet und Sie nahezu Echtzeitzugriff auf aktuelle Daten benoetigen, ist Hudi die richtige Wahl.
Zusammenfassung¶
Hudi is optimal for CDC and frequent updates. CoW and MoR strategies balance reads vs writes.