跳转到主要内容

RaySQL:Ray上的DataFusion

项目描述

RaySQL:Ray上的DataFusion

这是一个研究项目,旨在评估使用Ray和DataFusion从Python执行分布式SQL查询。

目标

  • 演示如何在DataFusion之上轻松构建新系统。请参阅设计文档以了解RaySQL是如何工作的。
  • 推动DataFusion的Python绑定的需求。
  • 为有趣的博客文章或会议演讲创建内容。

非目标

  • 构建和支持生产系统。

示例

使用Google Colab 笔记本在您的浏览器中运行以下示例。

import ray
from raysql.context import RaySqlContext
from raysql.worker import Worker

# Start our cluster
ray.init()

# create some remote Workers
workers = [Worker.remote() for i in range(2)]

# create a remote context and register a table
ctx = RaySqlContext.remote(workers)
ray.get(ctx.register_csv.remote('tips', 'tips.csv', True))

# Parquet is also supported
# ctx.register_parquet('tips', 'tips.parquet')

result_set = ray.get(ctx.sql.remote('select sex, smoker, avg(tip/total_bill) as tip_pct from tips group by sex, smoker'))
print(result_set)

状态

  • RaySQL可以运行22个TPC-H基准查询中的21个(查询15需要DDL,但目前尚不支持)。

功能

  • 由于DataFusion的支持,具有成熟的SQL支持(CTEs、连接、子查询等)
  • 支持CSV和Parquet文件

限制

  • 目前需要共享文件系统

性能

此图表显示了RaySQL与Apache Spark在非常小的数据集(10GB)上(在我的桌面(Threadripper具有24个物理核心)上运行)对于SQLBench-H的性能比较。RaySQL和Spark都配置了24个执行器。

请注意,查询15被排除在两个结果之外,因为RaySQL尚不支持DDL。

总时间

对于这个比例和环境,RaySQL的整体速度大约快65%。

SQLBench-H Total

每个查询时间

Spark在某些查询上速度更快,这可能是由于广播交换,RaySQL尚未实现。

SQLBench-H Per Query

性能计划

我计划进行以下更改以改进性能

  • 更好地使用Ray futures以并行运行更多任务
  • 使用Ray对象存储进行洗牌数据传输以降低磁盘I/O成本
  • 持续升级到DataFusion的新版本以获取最新优化

构建

# prepare development environment (used to build wheel / install in development)
python3 -m venv venv
# activate the venv
source venv/bin/activate
# update pip itself if necessary
python -m pip install -U pip
# install dependencies (for Python 3.8+)
python -m pip install -r requirements-in.txt

每次rust代码更改时(您的更改或通过git pull

# make sure you activate the venv using "source venv/bin/activate" first
maturin develop
python -m pytest

基准测试

在运行基准测试时创建发布构建,然后使用pip安装轮子。

maturin develop --release

如何更新依赖项

要更改测试依赖项,请更改requirements.in并运行

# install pip-tools (this can be done only once), also consider running in venv
python -m pip install pip-tools
python -m piptools compile --generate-hashes -o requirements-310.txt

要更新依赖项,请使用-U运行

python -m piptools compile -U --generate-hashes -o requirements-310.txt

更多详细信息这里

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

raysql-0.5.0.tar.gz (127.0 kB 查看哈希值)

上传时间

构建分布

raysql-0.5.0-cp37-abi3-manylinux_2_34_x86_64.whl (13.9 MB 查看哈希值)

上传时间 CPython 3.7+ manylinux: glibc 2.34+ x86-64

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面