Skip to main content
QUICK REVIEW

[论文解读] Sparkle: Optimizing Spark for Large Memory Machines and Analytics

Mijung Kim, Jun Li|arXiv (Cornell University)|Aug 18, 2017
Cloud Computing and Resource Management参考文献 9被引用 6
一句话总结

Sparkle 通过用共享内存混洗引擎替代基于 TCP 的混洗,并引入堆外内存存储以实现高效的原地更新,从而优化了 Apache Spark 在大内存扩展型系统上的性能。这使得迭代图工作负载的性能最高提升 20 倍,且在同等硬件条件下相比扩展型集群实现 1.6 倍至 5 倍的加速。

ABSTRACT

Spark is an in-memory analytics platform that targets commodity server environments today. It relies on the Hadoop Distributed File System (HDFS) to persist intermediate checkpoint states and final processing results. In Spark, immutable data are used for storing data updates in each iteration, making it inefficient for long running, iterative workloads. A non-deterministic garbage collector further worsens this problem. Sparkle is a library that optimizes memory usage in Spark. It exploits large shared memory to achieve better data shuffling and intermediate storage. Sparkle replaces the current TCP/IP-based shuffle with a shared memory approach and proposes an off-heap memory store for efficient updates. We performed a series of experiments on scale-out clusters and scale-up machines. The optimized shuffle engine leveraging shared memory provides 1.3x to 6x faster performance relative to Vanilla Spark. The off-heap memory store along with the shared-memory shuffle engine provides more than 20x performance increase on a probabilistic graph processing workload that uses a large-scale real-world hyperlink graph. While Sparkle benefits at most from running on large memory machines, it also achieves 1.6x to 5x performance improvements over scale out cluster with equivalent hardware setting.

研究动机与目标

  • 解决在大内存扩展型系统上运行 Spark 时的性能瓶颈,其中传统的基于 TCP 的混排和 JVM 堆管理效率低下。
  • 减轻由不可变 RDD 和迭代工作负载(如机器学习和图分析)中频繁数据混排导致的垃圾回收压力。
  • 利用扩展型系统中的全局共享内存,消除网络栈开销,实现任务间低延迟、高吞吐量的数据通信。
  • 通过引入堆外内存存储以实现直接的原地更新,提升内存密集型、迭代型数据分析的内存效率和可扩展性。
  • 证明当 Spark 经过适当优化时,扩展型架构在通信和内存密集型工作负载上可优于扩展型集群。

提出的方法

  • 设计一种共享内存管理方案和分配器,使工作进程能够直接访问和管理原生全局共享内存,避免 JVM 对象开销。
  • 实现一种共享内存混洗引擎,用直接内存引用替代基于 TCP/IP 的数据传输,消除序列化、反序列化和复制的开销。
  • 引入堆外内存存储,用于直接在原生内存中缓存和更新数据结构(例如信念向量、消息),支持原地更新并减少垃圾回收压力。
  • 通过全局内存可见性将多个混排阶段合并为一个,优化图处理,降低迭代开销。
  • 将性能关键的内核(例如消息聚合)从 Scala 移植到 C++,以加速计算。
  • 通过在堆外存储中定期检查点实现容错机制,性能影响极小(最坏情况下仅增加约 8% 的开销)。

实验结果

研究问题

  • RQ1在大内存扩展型系统中,Spark 中的共享内存通信是否能显著降低混排延迟,相比基于 TCP/IP 的方式?
  • RQ2堆外内存存储在多大程度上能减少迭代型 Spark 工作负载中的垃圾收集压力并提升性能?
  • RQ3在扩展型与扩展型配置下,Sparkle 架构与原生 Spark 相比,在性能和内存效率方面有何差异?
  • RQ4共享内存混排和堆外存储对大规模图分析工作负载(如信念传播)的性能有何影响?
  • RQ5能否在不引入显著性能惩罚的情况下,高效地将容错机制集成到堆外存储中?

主要发现

  • 仅使用共享内存混排引擎,Sparkle 在扩展型机器上相比原生 Spark 性能提升 1.3 倍至 6 倍。
  • 共享内存混排与堆外内存存储结合使用,在使用真实超链接图的大规模信念传播工作负载上实现了超过 20 倍的加速。
  • Sparkle 在同等硬件条件下相比扩展型集群实现了 1.6 倍至 5 倍的性能提升,证明了在适当优化下扩展型架构的优势。
  • 内存使用量大幅降低:Sparkle 在不使用堆内缓存的情况下仅使用 144 GB 堆外内存,而原生 Spark 在相同工作负载下使用超过 700 GB。
  • 通过全局内存访问将两个混排阶段合并为一个,信念传播工作负载的每次迭代时间从 13 秒减少到 9 秒。
  • 通过检查点实现容错仅在最坏情况下增加约 8% 的执行时间开销,证实了 Sparkle 容错设计的高效性。

更好的研究,从现在开始

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

无需绑定信用卡

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