Skip to content

[EPIC] Distributed Execution for Reads/Writes #23

Open

Description

@NoahKusaba

Goal

Run Iceberg reads and writes in parallel on
Ballista executors: apache/datafusion-ballista#2217 adds an iceberg-ballista crate whose
logical and physical extension codecs send Iceberg plans to the scheduler and
executors.

A codec in another process has to name each node's type, read what it was built
from, and rebuild an equivalent node from those parts alone. This epic tracks the
changes that make that possible, split into what blocks
apache/datafusion-ballista#2217 and what improves the integration once it has
landed.

This likely is all relevant to datafusion-distributed as well, but written from the perspective of Ballista, so it may not be consistent to their needs.

I'm likely missing to-do's as well, so please let me know if someone notices anything and I can update this epic.

Last updated 2026-10-11.

Required (blocking)

apache/datafusion-ballista#2217 can't merge until these are on
datafusion-iceberg main. Today it depends on a fork branch that carries all of
them except partitioned scans. Once they land, it switches to this repo's crate,
now named iceberg-datafusion again (#61, closes #30).

datafusion-distributed keeps its own DataSourceExec integration (built on
WorkUnitFeeds), so it needs the planned file tasks to be reachable, but not
necessarily the grouping above.

Nice to have

Fixes and improvements that don't block apache/datafusion-ballista#2217. Most
of the iceberg-rust items remove a workaround in iceberg-ballista or close a
known gap.

datafusion-iceberg

Correctness bugs

Opened by @andygrove. None of these blocks apache/datafusion-ballista#2217, but
each returns wrong results or fails in a way a distributed run hits too.

Writes:

Scans and filter pushdown:

Catalog and cached schemas:

iceberg-rust

Merged:

In review:

Not opened yet, most important first:

To investigate: whether FileIO can refresh catalog-vended storage credentials
during a long job.

Merge order

  1. feat: make the plan nodes inspectable and rebuildable #20 (merged)
  2. The rest of the required items, which build on feat: make the plan nodes inspectable and rebuildable #20, in any order:

The nice-to-haves can land in any order.

Activity

  1. changed the title [-][EPIC] Distributed execution with Ballista[/-] [+][EPIC] Distributed execution[/+] on Sep 29, 2026
  2. changed the title [-][EPIC] Distributed execution[/-] [+][EPIC] Distributed Execution for Reads/Writes[/+] on Sep 29, 2026
  3. NoahKusaba commented on Sep 29, 2026

    @NoahKusaba
    ContributorAuthor

    cc @mbutrovich

    At your suggestion I put together an EPIC to track unfinished work for distributed datafusion execution, which is relevant for both ballista and datafusion-distributed.

  4. NoahKusaba commented on Sep 29, 2026

    @NoahKusaba
    ContributorAuthor
  5. NoahKusaba commented on Sep 29, 2026

    @NoahKusaba
    ContributorAuthor

    cc @alexanderbianchi --> I know you represent the interested party from datafusion-distributed .

  6. NoahKusaba commented on Sep 29, 2026

    @NoahKusaba
    ContributorAuthor

    As mbutrovich has stated there is more review bandwidth for iceberg-rust PR's, I'm going to first focus on the "idemopotent key change on fast_appends", as it closes the only gap in correct writes and the apache/iceberg-rust#3297 we reviewed, as it's mostly done.

    On the datafusion-iceberg side, I'm going to wait on PR #20 to merge while I'm doing the iceberg-rust stuff, and then start opening the remaining PR's that stack on top of it.

    I've also messaged @toutane on slack about re-opening his partitioned reads PR on this repo, and I'll look to re-open it myself by end-of-october as it's a major blocker.

  7. alexanderbianchi commented on Sep 29, 2026

    @alexanderbianchi

    Thanks for the write-up! A lot of these primitives overlap with what DFD needs, which is great. In DFD, we’ll maintain our own DataSourceExec integration because it’s built on the WorkUnitFeeds abstraction. Ideally, we can reuse upstream for everything else.

    As these APIs become public, I’d like to make sure they also accommodate DFD’s execution model—particularly running writers on workers and collecting their results for a coordinator-side commit.

    Breaking this into sub-issues would help; I know a few engineers looking to pick up tickets, including myself.

    I can ask @toutane whether he wants to move apache/iceberg-rust#2671 here or whether I should carry it forward—we work together.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions