Apache DataFusion Ballista Distributed Query Engine
Apache DataFusion Ballista Distributed Query Engine
Ballista is a distributed query execution engine that enhances Apache DataFusion by enabling the parallelized execution of workloads across multiple nodes in a distributed environment.
Existing DataFusion application:
use datafusion::prelude::*;
#[tokio::main]
async fn main() -> datafusion::error::Result<()> {
let ctx = SessionContext::new();
// register the table
ctx.register_csv("example", "tests/data/example.csv", CsvReadOptions::new())
.await?;
// create a plan to run a SQL query
let df = ctx
.sql("SELECT a, MIN(b) FROM example WHERE a <= b GROUP BY a LIMIT 100")
.await?;
// execute and print results
df.show().await?;
Ok(())
}
can be distributed with few lines of code changed:
[!IMPORTANT]
There is a gap between DataFusion and Ballista, which may bring incompatibilities. The community is actively working to close the gap
…
For documentation or more examples, please refer to the Ballista User Guide.
Ballista serves several distinct audiences:
These audiences are documented in more detail, along with the guarantees each relies on, in the User Personas guide.
A Ballista cluster consists of one or more scheduler processes and one or more executor processes. These processes can be run as native binaries and are also available as Docker Images, which can be easily deployed with Docker Compose or Kubernetes.
The following diagram shows the interaction between clients and the scheduler for submitting jobs, and the interaction between the executor(s) and the scheduler for fetching tasks and reporting task status.
See the architecture guide for more details.
The easiest way to get started is to run one of the standalone or distributed examples. After that, refer to the Getting Started Guide.
Ballista provides a browser-based Web TUI for monitoring a running cluster. It exposes the TUI views for jobs, executors, metrics, and scheduler information directly in a web browser.
When the scheduler HTTP endpoint is available, opening the scheduler address in a browser, for example http://localhost:50050, redirects to a hosted Web TUI.
For more information, including how to run the Web TUI locally, see the Ballista CLI documentation.
Ballista uses Cargo features to enable optional functionality. Below are the available features for each crate.
standalone
Yes
Enables standalone mode with in-process scheduler and executor
arrow-ipc-optimizations
Yes
Enables Arrow IPC optimizations for better shuffle performance
spark-compat
No
Enables Spark compatibility mode via datafusion-spark
build-binary
No
Required for building binary executables (AWS S3 support, CLI parsing)
force_hash_collisions
No
Testing-only: forces all values to hash to same value
build-binary
Yes
Builds the scheduler binary with CLI and logging
substrait
No
Enables Substrait plan support
prometheus-metrics
No
Enables Prometheus metrics collection
graphviz-support
No
Enables execution graph visualization
spark-compat
No
Enables Spark compatibility mode
keda-scaler
No
Kubernetes Event Driven Autoscaling integration
rest-api
No
Enables REST API endpoints
disable-stage-plan-cache
No
Disables caching of stage execution plans
arrow-ipc-optimizations
Yes
Enables Arrow IPC optimizations
build-binary
Yes
Builds the executor binary with CLI and logging
mimalloc
Yes
Uses mimalloc memory allocator for better performance
spark-compat
No
Enables Spark compatibility mode
tui
Yes
Enables a REST client with Terminal User Interface
# Build with standalone support (default)
cargo build -p ballista
# Build with Substrait support
cargo build -p ballista-scheduler --features substrait
# Build with Spark compatibility
cargo build -p ballista-executor --features spark-compat
Ballista supports a wide range of SQL, including CTEs, Joins, and subqueries and can execute complex queries at scale, but still there is a gap between DataFusion and Ballista which we want to bridge in near future.
Refer to the DataFusion SQL Reference for more information on supported SQL.
The following organizations use Ballista. To add yours, open a pull request.
Organization Spice AI CoralogixPlease see the Contribution Guide for information about contributing to Ballista.
No open issues yet, or sync has not completed.