datafusion-ballista:基于 Apache DataFusion 的分布式查询执行引擎项目

Apache DataFusion Ballista Distributed Query Engine

分支35Tags48
文件最后提交记录最后更新时间
1 年前
5 天前
5 天前
3 天前
11 天前
11 天前
5 天前
5 天前
10 天前
2 天前
5 天前
17 天前
1 个月前
1 个月前
2 个月前
5 年前
18 天前
3 天前
4 天前
29 天前
29 天前
1 个月前
1 年前
1 年前
1 个月前
9 年前
4 年前
2 年前
8 个月前
6 个月前
6 个月前
1 个月前

Ballista:让 DataFusion 应用实现分布式运行

Apache licensed

logo

Ballista 是一个分布式查询执行引擎,它通过支持在分布式环境中的多个节点上并行执行工作负载,对 Apache DataFusion 进行了增强。

现有的 DataFusion 应用:

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(())
}

只需修改少量代码即可实现分布式部署:

Important

DataFusion 和 Ballista 之间存在一定差异,这可能会导致不兼容性问题。社区正在积极努力缩小这一差距。

use ballista::prelude::*;
use datafusion::prelude::*;

#[tokio::main]
async fn main() -> datafusion::error::Result<()> {
    // create SessionContext with ballista support
    // standalone context will start all required
    // ballista infrastructure in the background as well
    let ctx = SessionContext::standalone().await?;

    // everything else remains the same

    // 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(())
}

如需文档或更多示例,请参阅 Ballista 用户指南

Ballista 的适用人群

Ballista 面向以下几类不同的用户群体:

  • 需要多节点扩展的 DataFusion 用户——您已在单台机器上使用 Apache DataFusion,但现有资源已无法满足需求。Ballista 可在集群中运行相同的 SQL 和 DataFrame 工作负载,只需最少的代码更改,且能保证结果一致。
  • 希望使用相同执行模型的 Spark 用户——您正在运行 Spark SQL 或批处理作业,并希望有一个更轻量级、Rust 原生的替代方案,而无需重新学习新的范式。Ballista 保留了熟悉的模型:按 shuffle 边界将计划拆分为多个阶段、每个分区一个任务、具有 vcore 的执行器,以及自适应查询执行(AQE)。
  • 构建专用引擎的库用户——您正在构建定制的分布式查询引擎,并希望获得可重用的调度器、执行器和计划序列化构建块(带有扩展点),而不是从零开始编写分布式执行逻辑。

有关这些用户群体的更多详细信息,以及每个群体所依赖的保障,请参阅 用户角色 指南。

架构

Ballista 集群由一个或多个调度器进程和一个或多个执行器进程组成。这些进程可以作为原生二进制文件运行,也可以作为 Docker 镜像使用,可通过 Docker ComposeKubernetes 轻松部署。

下图展示了客户端与调度器之间用于提交作业的交互,以及执行器与调度器之间用于获取任务和报告任务状态的交互。

Ballista 集群 diagram

更多详情,请参见 架构指南

快速开始

最简单的入门方式是运行一个独立模式或分布式模式的示例。之后,请参考快速开始指南

Web 终端用户界面(Web TUI)

Ballista 提供了一个基于浏览器的 Web TUI,用于监控运行中的集群。它直接在 Web 浏览器中展示作业、执行器、指标和调度器信息的 TUI 视图。

Ballista Web TUI

当调度器 HTTP 端点可用时,在浏览器中打开调度器地址(例如 http://localhost:50050)会重定向到托管的 Web TUI。

有关更多信息,包括如何在本地运行 Web TUI,请参阅 Ballista CLI 文档

Cargo 特性

Ballista 使用 Cargo 特性来启用可选功能。以下是每个 crate 可用的特性。

ballista(客户端)

特性 默认启用 描述
standalone 启用独立模式,包含进程内调度器和执行器

ballista-core

特性 默认启用 描述
arrow-ipc-optimizations 启用 Arrow IPC 优化以提升 shuffle 性能
spark-compat 通过 datafusion-spark 启用 Spark 兼容模式
build-binary 构建二进制可执行文件所需(支持 AWS S3、CLI 解析)
force_hash_collisions 仅测试用:强制所有值哈希到相同值

ballista-scheduler

特性 默认启用 描述
build-binary 构建带有 CLI 和日志功能的调度器二进制文件
substrait 启用 Substrait 计划支持
prometheus-metrics 启用 Prometheus 指标收集
graphviz-support 启用执行图可视化
spark-compat 启用 Spark 兼容模式
keda-scaler Kubernetes 事件驱动自动扩缩集成
rest-api 启用 REST API 端点
disable-stage-plan-cache 禁用阶段执行计划的缓存

ballista-executor

特性 默认值 描述
arrow-ipc-optimizations 启用 Arrow IPC 优化
build-binary 构建带有命令行界面和日志功能的执行器二进制文件
mimalloc 使用 mimalloc 内存分配器以获得更好的性能
spark-compat 启用 Spark 兼容性模式

ballista-cli

特性 默认值 描述
tui 启用带有终端用户界面(TUI)的 REST 客户端

TUI Jobs table

使用示例

# 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 支持多种 SQL 功能,包括 CTE、连接和子查询,能够大规模执行复杂查询,但目前 DataFusion 与 Ballista 之间仍存在差距,我们计划在不久的将来弥合这一差距。

有关支持的 SQL 的更多信息,请参阅 DataFusion SQL 参考

谁在使用 Ballista

以下组织正在使用 Ballista。如要添加您的组织,请提交拉取请求。

组织
Spice AI Spice AI
Coralogix Coralogix

贡献指南

有关为 Ballista 做出贡献的信息,请参阅 贡献指南

项目介绍

Apache DataFusion Ballista 分布式查询引擎【此简介由AI生成】

定制我的领域
442.14 K320访问 GitHub