Skip to content
Core ConceptsLast updated: October 15, 2026

Apache Iceberg vs Apache Hudi

Iceberg leads on multi-engine reads, writes, and open catalogs; Hudi leads on record-key indexing and incremental upserts. Compare architecture and use cases.

iceberg vs hudiapache iceberg apache hudi comparisonhudi iceberg differenceopen table format hudi iceberghudi vs iceberg which better

Apache Iceberg vs Apache Hudi

The short answer: choose Iceberg when several engines need to read and write the same tables through an open catalog, and consider Hudi when your main workload is high-volume upserts by record key with incremental pulls in Spark or Flink. As of October 2026 the current releases are Iceberg 1.12.0 and Hudi 1.2.1.

Apache Iceberg and Apache Hudi (Hadoop Upserts Deletes and Incrementals) are both Apache Software Foundation-governed open table formats that solve the “mutable data in object storage” problem for data lakehouses. They approach the problem from different angles, reflecting their different origins and primary use cases.

Origins and Design Philosophy

AspectApache IcebergApache Hudi
Created byNetflix (2017)Uber (2016)
Open-sourced20182017
Primary design goalMulti-engine interoperable table formatStreaming upsert / incremental processing on Hadoop
GovernanceApache Software FoundationApache Software Foundation
Primary homeBroad cloud/engine ecosystemSpark + Hadoop ecosystem

Hudi was born at Uber to solve a specific operational problem: efficiently updating ride-sharing data in HDFS (later S3) without full partition rewrites. Iceberg was born at Netflix to solve a different problem: table format fragility, hidden partitioning complexity, and lack of atomic semantics in the Hive ecosystem.

Architecture Comparison

Table Types

Hudi has two native table types that correspond to write optimization strategies:

Iceberg also supports CoW and MoR, but these are per-operation write modes (write.delete.mode, write.update.mode, write.merge.mode), not different table types. Iceberg’s abstractions are more unified.

Transaction Log / Metadata

Hudi: Uses a timeline stored in a .hoodie/ directory. Each commit, clean, compaction, and rollback is an action on the timeline. The timeline is Hudi-specific and requires the Hudi library to interpret.

Iceberg: Uses a snapshot-based metadata tree (metadata JSON → manifest list → manifests → data files). The metadata is self-describing and structured: any client that can read the spec can navigate it.

Indexing

Hudi has built-in, native indexing support:

Hudi’s indexing makes it extremely efficient for key-based upserts: given a set of record keys, Hudi can determine which files contain those keys without a full scan.

Iceberg: File-level statistics in manifests plus optional Parquet bloom filters. Iceberg relies on query engines, sorting, and compaction for clustering rather than native record-key indexing.

Feature Comparison

FeatureApache IcebergApache Hudi
Time travelYes (snapshot-based)Yes (timeline-based)
Schema evolutionFull (column IDs)Full
Incremental readsYes (snapshot diff, changelog view)Excellent (native incremental query)
Streaming upsertsVia MoR + Flink/SparkNative (core design goal)
Multi-engine readsExcellent (REST Catalog)Good (but Hudi-specific connector needed)
Multi-engine writesExcellentSpark and Flink
Record-key indexingVia bloom filtersNative (multiple index types)
Partition evolutionYesLimited
Hidden partitioningYesNo
Open catalog specREST Catalog standardHive Metastore / registry
Python clientPyIceberg (read and write)hudi-rs Python bindings (reads)

Incremental Processing: Hudi’s Strength

Hudi’s native incremental query mode is more powerful than Iceberg’s snapshot-diff approach for certain streaming use cases:

Hudi incremental query: Query only records changed since a specific commit, including which records were inserted, updated, or deleted with their exact keys.

# Hudi: native incremental read
spark.read.format("hudi") \
    .option("hoodie.datasource.query.type", "incremental") \
    .option("hoodie.datasource.read.begin.instanttime", "20260514000000") \
    .load("s3://bucket/orders/")

Iceberg incremental read: Spark incremental reads return rows appended between snapshots. For updates and deletes, Iceberg’s create_changelog_view Spark procedure computes row-level change records (with optional pre and post images by identifier columns), and format v3 row lineage adds stable row IDs. Hudi still tracks changed keys more directly.

For streaming CDC pipelines where you need to know precisely which keys changed (not just which files), Hudi’s native incremental semantics can be more precise.

Multi-Engine: Iceberg’s Strength

Iceberg’s REST Catalog specification enables any engine to read and write Iceberg tables with full catalog services (discovery, access control, credential vending). Hudi’s ecosystem is more Spark-centric:

When to Choose Apache Iceberg

When Apache Hudi May Be Preferred

The Current Industry Landscape

As of 2026, Apache Iceberg has the broadest multi-engine support and the most active cloud vendor adoption. Hudi remains strong in Spark and Flink streaming upsert workloads, particularly in organizations where it was the original adoption, and it keeps adding features (Hudi 1.2 added VECTOR, VARIANT, and BLOB types and Lance file support). Teams that need both can use Apache XTable (incubating) to expose Hudi tables as Iceberg metadata.

For new lakehouse deployments, Apache Iceberg is the safer default for maximum future optionality.

Read more on this blog

📚 Go Deeper on Apache Iceberg

Alex Merced has authored three hands-on books covering Apache Iceberg, the Agentic Lakehouse, and modern data architecture. Pick up a copy to master the full ecosystem.

← Back to Iceberg Knowledge Base

Work with Alex