Apache Hudi: The Path Forward
Vinoth Chandar, Raymond Xu
PMC, Apache Hudi
Agenda
1) Hudi Intro
2) Table Metadata
3) Caching
4) Community
Hudi Intro
Components, Evolution
Typical Use-Cases
Hudi - the Pioneer
Serverless, transactional layer over lakes.
Multi-engine, Decoupled storage from engine/compute
Introduced notions of Copy-On-Write and Merge-on-Read
Change capture on lakes
Ideas now heavily borrowed outside.
The Hudi Stack
Lakes on cheap, scalable Hadoop compatible storage
Built on open file and data formats
Transactional Database Kernel
SQL and Programming APIs
Platform services and operational tools
Universally queryable from popular engines
It’s a platform!
Both streaming + batch style pipelines
For data lake workloads
With tightly-integrated components
http://hudi.apache.org/blog/2021/07/21/streaming-data-lake-platform
Table Format
Avro Schema, Evolution rules
File groups, reduce merge overhead
Timeline => event log, WAL
Internal metadata table
Ongoing
File Formats
Base and Delta Log Files
Ongoing
Indexes
Pluggable, Consistent with txns
For upserts, deletes
Ongoing
Concurrency Control
Hudi did not need multi-writer support
Hudi now does Optimistic Concurrency Control
Future/Ongoing
Writers
Incremental & Batch write operations
Record level merges APIs
Record level metadata
Readers
Hive, Impala, Presto, Spark, Trino, Redshift
Use engine’s native readers
First class support for incremental queries
Flexibility - snapshot vs read-optimized
Future
Table Services
Self managing database runtime
Table services know each other
Cleaning (committed/uncommitted), archival, clustering, compaction, ..
Services can be run continuously or scheduled
Platform Services
DeltaStreamer/FlinkStreamer ingest/ETL utility
Deliver Commit notifications
Kafka Connect Sink
Data Quality checkers
Snapshot, Restore, Export, Import
Table Metadata
Current choices, Ongoing work, Future plans
What qualifies as table metadata?
Schema |
|
Files/Objects |
|
Stats |
|
Redo Logs |
|
Indexes? |
|
How’s this stored in Hudi, today?
Schema |
|
Files/Objects |
|
Redo Logs |
|
Stats |
|
RFC-27 (Ongoing): Flat Files are not cool
Scaling file stats for high scale writing
Range reads to the rescue!
The Hudi Timeline server
Metadata need efficient serving, caching
Responsibilities
Incremental sync
S3 Baseline: listing p90
Timeline Server: 1-10 ms!
File-backed metadata: ~1 second!
Extending the Timeline Server
New APIs
Let’s make a cluster!
Cache
Basic Idea, Design Considerations
Basic Idea
Problems
base file b @ t1
base file b’ @ t2
log file 1 for b
log file 2 for b
log file 1 for b’
log file 2 for b’
Time
Hudi FileGroup
log file 3 for b’
Hudi FileGroup fits caching
Design Considerations
Refresh-Ahead
Cache
base file b
log file 1 for b
log file 2 for b
compacted
Change-Data-Capture
Refresh-Ahead
Read-Through
Query I/O
Read-Through
Design Considerations
FileGroup consistent hashing
Cache�Node A
FileGroup
Query I/O
Cache Node B
FileGroup
FileGroup
Coordinator�(Timeline server?)
Query I/O
Lake Storage
Cache (e.g. Alluxio)
Transactionality
Pluggable Caching Layer
Community
Adoption, Operating the Apache way, Ongoing work
How we roll?
Friendly and diverse community
Developers
Users
1200+ �Slack
200+
Contributors
1000+�GH Engagers
~10-20
PRs/week
20+�Committers
10+
PMCs
Major Ongoing Works
Major Ongoing Works
RFC-20: Error tables (PR #3312)
RFC-08: Record level indexing (PR #3508)
RFC-15: Synchronous, Multi table Metadata writes (PR #3590)
Hudi + Dbt (dbt-labs/dbt-spark/pull/210)
PrestoDB/Trino Connectors (Early design)
Engage With Our Community
User Docs : https://hudi.apache.org
Technical Wiki : https://cwiki.apache.org/confluence/display/HUDI
Github : https://github.com/apache/hudi/
Twitter : https://twitter.com/apachehudi
Mailing list(s) : dev-subscribe@hudi.apache.org (send an empty email to subscribe)
dev@hudi.apache.org (actual mailing list)
Slack : https://join.slack.com/t/apache-hudi/signup
Thanks!
Questions?