Blaze:SparkSQL本机算子化在快手的设置与实践
什么是Blaze
Blaze是Apache Spark的加速器,利用本机向量执行加速查询处理,结合Apache Arrow-DataFusion库的功能和Spark分布式计算框架的规模优势。
发动机路线图
Blaze的路线图包括Relation作品等。
体系结构和实施细节
体系结构溢出
Blaze的体系结构包括会话扩展、Plan SerDe、JNI网关和Native Operators等组件。
高级组件
- Blaze会话扩展:将整个加速器挂钩到Spark执行生命周期中。
- Plan SerDe:使用protobuf对DataFusion计划进行序列化和反序列化。
- JNI网关:通过JNI边界传递数据和控制。
- Native Operators:定义每个SparkPlan如何映射到本地执行副本。
Execution Flow详细信息
- 物理计划转换:生成并提交原生计划。
- 本机执行:进行本机执行。
更多实施细节
- 与UDF兼容:内存管理、更高效的运营商实现。
- 兼容:内存管理、更高效的运营商实现。
- Sort操作:sort在生锈时不稳定。
- HashMap:hashbrown(SwissTable hashmap)。
- 比较操作:箭头行。
- Columnarized Shuffle:按自定义格式按列组织的shuffle数据文件。
Contribution to DataFusion
- 内存管理。
- Remote Storage API。
- SortExec与溢出。
- SortMergeJoinExec。
- SortPrevservingMergeExec通过TournamentTree优化。
运营商覆盖范围
涵盖多种运算符。
Beachmark
- 传递所有tpc-ds查询。
- 单个查询q82的性能提升高达10倍。
- 所有查询的平均性能提升2倍。
灰色发布和在线收入
- 在线CPU绑定作业。
- 单个查询的性能提升高达4.3倍。
- 平均2倍性能提升。
未来工作
- 大规模在线使用。
- 提高数据类型和运营商覆盖率。
- 抽象界面和支持更多引擎。
- 为开源社区做出贡献。