Skip to content

datafusion-contrib/datafusion-distributed

Repository files navigation

DataFusion Distributed

Crates.io Docs Apache licensed Discord chat

Scale Apache DataFusion across a cluster — without leaving the DataFusion you already know.

Note

This project is not part of Apache DataFusion.

DataFusion Distributed is a toolkit that extends Apache DataFusion with distributed query execution. It aims for a developer experience as close as possible to vanilla DataFusion while staying unopinionated about your networking stack.

It's not an out-of-the-box distributed engine — it's a library for building one, with sane defaults for the common case of file-based data sources. A distributed plan is a normal DataFusion physical plan, with a few extra nodes that stream Arrow data between machines, so you can take an existing single-node DataFusion system and add distributed execution with minimal changes.

Getting started

Going distributed takes exactly three things:

  1. Enable the distributed planner on your session.
  2. Tell it where your workers are.
  3. Run the worker gRPC servers.

The Quick start walks through all three in a few minutes. For everything beyond that — resolving workers dynamically, distributing your own custom ExecutionPlans, collecting runtime metrics, and more — see the full documentation.

Benchmarks

DataFusion Distributed consistently outperforms other distributed query engines across TPC-H and TPC-DS. The chart below shows how much slower each engine is relative to DataFusion Distributed (lower is better):

How much slower than DataFusion Distributed?

Per-dataset totals
Dataset df-dist Ballista Spark Trino Queries compared
TPC-H SF1 7s 11s 30s 18s 22
TPC-H SF10 10s 57s 51s 33s 22
TPC-H SF100 42s N/A (#1836) 261s 93s 19
TPC-DS SF1 29s 72s 101s 85s 67

TPC-H SF1 TPC-H SF10 TPC-H SF100 TPC-DS SF1

Conditions. All engines ran on the same cluster: 12 AWS EC2 c5n.2xlarge instances (8 vCPUs and 21 GiB of memory each, with up to 25 Gbps networking) reading Parquet files stored in Amazon S3. Each engine's total is the sum of per-query median (p50) latencies over the queries that all compared engines completed successfully; lower is better.

The benchmarking code is public and open for anyone to easily reproduce. It uses AWS CDK for automating the creation of the benchmarking cluster so that anyone can reproduce the same results in their own AWS account. The code can be found in the benchmarks/cdk directory.

Core tenets of the project

  • Be as close as possible to vanilla DataFusion, providing a seamless integration with existing DataFusion systems and a familiar API for building applications.
  • Unopinionated about networking. This crate does not take any opinion about the networking stack, and users are expected to leverage their own infrastructure for hosting DataFusion nodes.
  • No coordinator-worker split. To keep infrastructure simple, any node can act as a coordinator or a worker.
  • A library, not an engine. The goal is to provide the tools for people to build distributed engines, not being one.

Documentation