Blaze:SparkSQL Native算子优化在快手的深度优化及大规模实践.pptx

Blaze:SparkSQL Native算子优化在快手的深度优化及大规模实践.pptx

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

DataFunCon#2024

Blaze:SparkSQLNative算子在快手的深度优化及大规模实践

王磊

快手大数据离线生产引擎及数据湖负责人

Contents目录

Blaze原理及架构设计

面向生产的深度优化

当前进展及未来规划

Blaze原理及架构设计

设计背景

如何持续提升计算引擎执行效率?

火山模型(Volcanomodel)

Spark1.0

代码生成(wholestage-codegen)

Spark2.0

自适应查询执行(AdaptiveQueryExecution)

Spark3.0

向量化执行(vectorization)

next

向量化原理

向量化计算优势:

可以高效利用现代CPU的SIMD指令实现指令集并行计算加速

主流的存储结构(如parquet)使用列式存储,向量化计算可以减少读写过程的行列互转开销

Filter

Project

TableScan

next()

next()

非向量化模型

每个tuple一次函数调用

缓存不友好,无法利用新硬件特性SIMD加速查询

Filter

Project

TableScan

nextBatch()

向量化模型

每个Batch一次函数调用,减少调用开销

Batch内数据采用列存,提高缓存命中率,利用SIMD优化

nextBatch()

相关工作

Project

Corporation

Description

Photon

Databricks

NativevectorizedengineforSpark

Velox

Meta

Vectorizedaccelerationlibrary

Gluten

IntelKyligence

PlugintooffloadSQLEnginetoNativeLibrary

Datafusion

Apache

Vectorizedaccelerationlibrary

Blaze

Kuaishou

PlugintooffloadSQLEnginetoNativeLibrary

Blaze是快手自研的基于rust和datafusion/arrow开发的Spark向量化执行引擎

PhotoBu

ffer

Blaze

DataFusion

Spark

PhysicalPlan

PhotoBuffer

Substrait

Gluten

Velox/Clickhouse

架构设计

架构设计

JNI

JNI

JNI

FFI

JNI

JNI

核心模块

NativeEngine

基于datafusion框架实现与Spark功能一致的native算子,以及相关内存管理、FFI交互等功能

JNIBridge

ProtoBuf

SparkExtension

用于实现Extension和NativeEngine之间的互相调用

定义用于JVM和native之间的算子描述协议

Spark插件,实现Spark算子到native算子的翻译

项目路线图

面向生产的深度优化

生产环境面临的主要问题核心优化点

细粒度的Failback机制

基于CBO的转换策略

更高效的向量化数据传输格式多级内存管理策略

复杂度更优的聚合算法实现

向量化场景的表达式重复计算优化

细粒度的Failback机制

演进式向量化执行

数据类型不支持

部分情况性能退化

引擎实现不兼容

算子/表达式不支持

基于CBO的转换策略

大数据量下数据行列转换开销大

基于CBO/RBO模型调整算子翻译策略:

历史执行数据

输入数据量

算子复杂度

更高效的向量化数据传输格式

业界的向量化数据通常使用arrow格式进行传输,但是实践过程我们发现arrow格式与主流的轻量压缩算法(snappy/lz4/zstd等)适配度不好,压缩率偏低。

所以我们在Blaze中定制了传输格式,除了尽可能去除冗余信息(如列名、数据类型)之外,还使用了byte-transpose技术提升数据压缩率,使得数据量大

幅下降。

线上2000多个作业的真实数据,上线后输入数据量小幅上涨的情况下,Shuffle数据量相比spark降近30%

Byte-transpose示例

多级内存管理策略

复杂度更优的聚合算法实现

向量化场景的表达式重复计算优化

计算公共表达式

SQL

替换表达式

正常逻辑

Yes No

公共表达式重复利用

非公共表达式正常计算

重构project算子,增加多算子融合代码生成逻辑

重构Filter算子,优化多谓词场景

计算复杂度较高的重复表达式

缓存结果多次复用

当前进展及未来规划

当前进展

支持parquet的向量化读写

线上常用算子的全面支持

线上常用表达式的全

文档评论(0)

优选文档 + 关注
实名认证
内容提供者

专注于发布优质文档,喜欢的可以关注一下哦~

1亿VIP精品文档

相关文档