Skip to main content
QUICK REVIEW

[论文解读] Flare: Native Compilation for Heterogeneous Workloads in Apache Spark

Grégory M. Essertel, Ruby Y. Tahboub|arXiv (Cornell University)|Mar 23, 2017
Advanced Database Systems and Queries参考文献 29被引用 10
一句话总结

Flare 是 Apache Spark 的原生代码编译后端,通过用原生编译代码替代 Spark 的基于 JVM 的执行方式,加速异构工作负载,在 TPC-H 基准测试和机器学习内核上实现了数量级的性能提升,同时不牺牲 Spark 的高级表达能力。它利用 Delite 的 DSL 编译栈优化用户定义函数,并在现代多核、内存优先的系统上实现横向扩展。

ABSTRACT

The need for modern data analytics to combine relational, procedural, and map-reduce-style functional processing is widely recognized. State-of-the-art systems like Spark have added SQL front-ends and relational query optimization, which promise an increase in expressiveness and performance. But how good are these extensions at extracting high performance from modern hardware platforms? While Spark has made impressive progress, we show that for relational workloads, there is still a significant gap compared with best-of-breed query engines. And when stepping outside of the relational world, query optimization techniques are ineffective if large parts of a computation have to be treated as user-defined functions (UDFs). We present Flare: a new back-end for Spark that brings performance closer to the best SQL engines, without giving up the added expressiveness of Spark. We demonstrate order of magnitude speedups both for relational workloads such as TPC-H, as well as for a range of machine learning kernels that combine relational and iterative functional processing. Flare achieves these results through (1) compilation to native code, (2) replacing parts of the Spark runtime system, and (3) extending the scope of optimization and code generation to large classes of UDFs.

研究动机与目标

  • 解决 Spark SQL 与 HyPer 等高端关系型引擎之间在 TPC-H 基准测试中仍存在一个数量级性能差距的问题。
  • 克服 Spark 当前运行时和代码生成栈的局限性,尤其是在结合关系型处理与迭代式函数计算的异构工作负载方面。
  • 通过与 Delite 的领域特定语言(DSL)编译栈集成,实现对机器学习和数据科学管道中用户定义函数(UDFs)的高性能执行。
  • 通过证明在强大、内存优先、多核系统上进行纵向扩展可实现更优性能并减少资源开销,重新评估 Spark 的以横向扩展为先的设计理念。
  • 在保持 Spark 高级 API 和表达能力的同时,通过先进的代码生成和优化技术,实现接近手工优化原生系统的性能。

提出的方法

  • 提出 Flare Level 1:在查询阶段粒度上,将 Spark 的 JVM 代码生成替换为原生代码生成,消除 JVM 开销。
  • 提出 Flare Level 2:将整个查询计划编译为原生代码,绕过 Spark 的 RDD 层,并针对共享内存多核架构进行优化。
  • 提出 Flare Level 3:将 Spark 查询计划映射到 Delite 的中间语言(DMLL),实现对关系型查询和用 Delite DSL 编写的 UDF 的端到端优化。
  • 利用 Delite 的编译栈生成高度优化的代码,包括 GPU 并行代码,用于机器学习(OptiML)、图处理(OptiGraph)和偏微分方程求解(OptiMesh)等领域的 UDF。
  • 采用混合执行模型,其中关系型算子被原生编译,而 UDF 通过 Delite 的 DSL 编译,实现在数据和计算阶段的统一优化。
  • 设计 Flare 以针对纵向扩展架构——即大内存、多核系统——在这些系统上容错需求较低,从而高效利用现代硬件资源。

实验结果

研究问题

  • RQ1原生代码编译能否在标准基准测试(如 TPC-H)上弥合 Spark SQL 与 HyPer 等顶尖关系型引擎之间的性能差距?
  • RQ2在使用 Spark 高级 API 的异构工作负载(如结合关系型处理与迭代式函数计算的机器学习流水线)中,性能可提升多少?
  • RQ3将 Spark 与 Delite 等领域特定语言(DSL)编译栈集成,在实现 UDF 和关系型算子的端到端优化方面有多高效?
  • RQ4从以横向扩展为先转向以纵向扩展为先的设计,在现代数据 analytics 系统中会产生怎样的性能影响?
  • RQ5能否在保持 Spark 高级抽象的同时,通过先进的代码生成和优化技术实现底层性能?

主要发现

  • Flare 在 TPC-H 基准测试中实现了数量级的性能提升,将查询执行时间缩短至 HyPer(顶尖关系型引擎)的 2–3 倍以内。
  • 对于结合 DataFrame 操作与迭代式 UDF 的机器学习工作负载,Flare 相较于标准 Spark 实现实现了 10 倍的性能提升。
  • Flare Level 2 通过将整个查询计划编译为原生代码,显著降低了运行时开销,消除了 RDD 层和 JVM 抽象的引入。
  • 与 Delite 的集成使得 OptiML 等 DSL 编写的 UDF 得到优化,支持 GPU 并行执行,性能可与手工优化的内核相媲美。
  • 该研究证明,在现代大内存、多核系统上进行纵向扩展,可优于传统横向扩展架构,尤其在 CPU 成为瓶颈时表现更优。
  • Flare 完全兼容 Spark SQL 的高级 API 和 DataFrame 抽象,证明在数据 analytics 系统中性能与表达能力并非相互排斥。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。