Spark native向量化组件 datafusion comet

背景

Apache Datafusion Comet 是苹果公司开源的加速Spark运行的向量化项目。

本项目采用了 Spark插件化 + Brotobuf + Arrow + DataFusion 架构形式

其中

  • Spark插件是 利用 SparkPlugin 插件,其中分为 DriverPlugin 和 ExecutorPlugin ,这两个插件在driver和 Executor启动的时候就会调用
  • Brotobuf 是用来序列化 spark对应的表达式以及计划,用来传递给 native 引擎去执行,利用了 体积小,速度快的特性
  • Arrow 是用来 spark 和 native 引擎进行高效的数据交换(native执行的结果或者spark执行的数据结果),主要在JNI中利用Arrow IPC 列式存储以及零拷贝等特点进行进程间数据交换
  • DataFusion 主要是利用Rust native以及Arrow内存格式实现的向量化执行引擎,Spark中主要offload对应的算子到该引擎中去执行

使用

复制代码
export COMET_JAR=spark/target/comet-spark-spark3.5_2.12-0.13.0-SNAPSHOT.jar

$SPARK_HOME/bin/spark-shell \
    --jars $COMET_JAR \
    --conf spark.driver.extraClassPath=$COMET_JAR \
    --conf spark.executor.extraClassPath=$COMET_JAR \
    --conf spark.plugins=org.apache.spark.CometPlugin \
    --conf spark.shuffle.manager=org.apache.spark.sql.comet.execution.shuffle.CometShuffleManager \
    --conf spark.comet.explainFallback.enabled=true \
    --conf spark.memory.offHeap.enabled=true \
    --conf spark.memory.offHeap.size=16g

主要是在classpath下得有对应的 comet对应的动态库

其中 spark.plugins=org.apache.spark.CometPlugin是开启 native 插件,主要是插入一些native计划,也是最核心的部分
spark.shuffle.manager=org.apache.spark.sql.comet.execution.shuffle.CometShuffleManager 是采用列式shuffle(采用Arrow IPC RecordBatch格式)进行数据交互
spark.memory.offHeap.enabled 开启offheap模式,该模式下,执行内存都是用native内存进行分配。

说明

  • native code基准测试

    借助Rust的提供的第三方基准测试工具Criterion, 可以进行native code性能的好坏,提供了更详细的统计分析、图表、与先前基准的差异对比,帮助开发者精确评估代码性能优化效果

  • flamegraph native火焰图的生成

    通过Rust三方提供的火焰图生成工具flamegraph,可以快读的定位出具体的函数耗时,而从帮助开发者快速的定位问题

    对于该Datafusion Comet项目,工具使用见profiling_native_code

    相对于其他开发语言,如java这种,如果说要进行基准测试和火焰图的生成,是需要手动进行下载对应的工具,而rust这种提供的三方包可以直接在代码级别进行了测试,确实是方便了不少

  • 关于该项目讨论

    Donation of a Spark native engine based on DataFusion & Arrow

相关推荐
qziovv11 小时前
Git 回退场景
大数据·git·elasticsearch
ZeroNews内网穿透12 小时前
面向 AI 协作的本地客户端能力:ZeroNews Agent Skills
大数据·人工智能·elasticsearch
SelectDB12 小时前
Agent 时代,为什么传统的可观测方案不适用了?
大数据·数据库·数据分析
Elastic 中国社区官方博客12 小时前
快 12 倍的 Elasticsearch 向量索引:使用 GPU 和 CPU 分层部署 NVIDIA cuVS
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索·nvidia
鹧鸪云光伏13 小时前
光伏设计软件:多屋脊房型如何设计?
大数据·信息可视化·光伏·光伏设计·光伏图纸
前沿推行者13 小时前
辽宁传媒学院教学特色解析:从实践导向到产教融合
大数据·人工智能
数智化管理手记13 小时前
精益生产3步实操,让现场从混乱变标杆
大数据·运维·网络·人工智能·精益工程
多年小白13 小时前
2026年5月半导体板块深度分析
大数据·人工智能·科技·区块链
才兄说13 小时前
机器人二次开发机器人动作定制?毫秒级同步精度
大数据·人工智能·机器人
2601_9577867713 小时前
拆解矩阵系统的底层逻辑:从“人海战术“到“一套系统管所有“
大数据·人工智能·矩阵