Skip to content

[EPIC] Distributed Execution for Reads/Writes #23

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.

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.

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:

iceberg-rust

In review:

Not opened yet, most important first:

  • Idempotency key on fast_append, checked inside the commit retry loop.
    Closes the concurrent-commit gap above: today a conflicting commit is retried
    and re-applied on the new head without re-checking the commit id.
  • A scan on a runtime that has shut down returns no rows instead of failing
  • The REST catalog never refreshes its OAuth token, so a long-lived scheduler
    fails to plan once its token expires
  • Debug output of FileIO/StorageConfig prints storage credentials
  • Table::with_runtime that keeps the table's manifest cache
  • TableScan::arrow_reader_builder(), from feat(datafusion): Add opt-in eager file scan planning with output partitioning iceberg-rust#2671, so a
    partitioned scan reads with exactly the reader settings its TableScan
    was built with

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
  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

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