Apache Hudi je navržený pro efektivní aktualizace dat v data lake. Ideální pro CDC pipeline s častými upserty.
Hudi — upserty v data lake¶
Uber vyvinul Hudi pro miliardy záznamů s častými aktualizacemi.
Dva typy tabulek¶
- Copy-on-Write — přepíše soubor; optimální pro čtení
- Merge-on-Read — delta logy; optimální pro zápis
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")
# Inkrementální čtení
spark.read.format("hudi")\
.option("hoodie.datasource.query.type", "incremental")\
.load("/data/hudi/orders")
Kdy použít Hudi¶
Apache Hudi je ideální volba pro scénáře, kde potřebujete pravidelně aktualizovat existující záznamy v data lake — například synchronizaci s produkční databází pomocí CDC (Change Data Capture). Na rozdíl od tradičního přístupu s přepisováním celých Parquet souborů Hudi umožňuje efektivní upserty a inkrementální čtení pouze změněných dat.
V praxi se Hudi často nasazuje ve spojení s Debeziem a Apache Kafka, kde Debezium zachytává změny z PostgreSQL nebo MySQL a Hudi je zapisuje do S3 nebo HDFS. Díky podpoře timeline a rollback mechanismů poskytuje Hudi i spolehlivost na úrovni ACID transakcí. Pokud vaše data pipeline zpracovává miliony záznamů denně a potřebujete near-real-time přístup k aktuálním datům, Hudi je správná volba.
Shrnutí¶
Hudi je optimální pro CDC a časté aktualizace. CoW a MoR strategie vyvažují čtení vs zápis.