RaySQL:Ray上的DataFusion
项目描述
RaySQL:Ray上的DataFusion
这是一个研究项目,旨在评估使用Ray和DataFusion从Python执行分布式SQL查询。
目标
非目标
- 构建和支持生产系统。
示例
使用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%。
每个查询时间
Spark在某些查询上速度更快,这可能是由于广播交换,RaySQL尚未实现。
性能计划
我计划进行以下更改以改进性能
- 更好地使用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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e3aee31c2bb3240766d7597b4b3a211c7bf1ce0336c9808dc3ea865fad686ff2 |
|
MD5 | 90ed1ff4970ab5a27cf7be053b5472fa |
|
BLAKE2b-256 | eb20f5fbc6c166c0109b149c688bff3cccf4ebd3eca7412983ae22cc14d803b8 |
关闭
raysql-0.5.0-cp37-abi3-manylinux_2_34_x86_64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2a85e9e54543c2d8c2baa1040c48349aca6cce6ec5a1eaa6aea7f53c0e74f949 |
|
MD5 | aa89d8071cee75713a6b5b29c1e414ae |
|
BLAKE2b-256 | d20b9e0b88bfaee749f4bd3c64e4241464e35c5337e0c124652f8d57aa83ce4a |