Apache Spark RDMA插件
Apache Spark™是一种用于大规模数据处理的开源,快速和通用引擎。Spark提供了一个接口,用于使用隐式数据并行和容错来编程整个集群。
概览
Apache Spark™为程序员提供了一个以数据结构为中心的API,称为弹性分布式数据集(RDD),这是一种分布在机器集群上的只读多集数据项,以容错方式进行维护。它是为了响应MapReduce集群计算范例的局限性而开发的,它强制分布式程序上的特定线性数据流结构:MapReduce程序从磁盘读取输入数据,在数据中映射函数,减少映射结果,以及存储减少磁盘上的结果。Spark的RDD作为分布式程序的工作集,提供(故意)受限形式的分布式共享内存。
Spark™加速MapReduce
RDD的可用性有助于实现迭代算法,在循环中多次访问其数据集,以及交互式/探索性数据分析,即重复的数据库式数据查询。与MapReduce实现相比,此类应用程序的延迟可能会减少几个数量级(在Apache Hadoop堆栈中很常见)。迭代算法类中有机器学习系统的训练算法,它构成了开发Apache Spark的最初动力。
加速Shuffle
Shuffle 是在计算阶段之间跨分区重新分配数据(也称为重新分区)的过程。Shuffle是一个昂贵的过程,尽可能避免。
在Hadoop中,shuffle将中间文件写入磁盘,这些文件由下一步/阶段提取。
使用Spark Shuffle,RDD保留在内存中并允许数据到达,但在使用群集时,需要网络资源来获取数据块,从而增加总体执行时间。
使用RDMA加速数据块的网络提取(使用以太网时为InfiniBand或RoCE提供RDMA)可降低CPU使用率和总体执行时间 - 引入SparkRDMA插件。
SparkRDMA插件
SparkRDMA是Apache Spark的高性能,可扩展且高效的ShuffleManager开源插件。
它利用RDMA / RoCE技术减少Shuffle数据传输所需的CPU周期,通过重复使用内存进行传输而不是像传统TCP堆栈那样多次复制数据来减少内存使用。
RDMA在各种类型的网络上都受支持,例如带有RoCE的传统以太网(融合以太网上的RDMA),Infiniband等等。
SparkRDMA插件旨在提供开箱即用的最佳性能。此外,如果希望最大限度地利用其安装,我们提供多种配置属性,以便在每个作业的基础上精确调整SparkRDMA。
性能
实验室测试显示,使用GroupByKey,TeraSort的执行时间缩短了x1.45,减少了x1.39:
SparkRDMA插件的好处
-
提供改进的性能
-
减少块传输时间
-
降低内存消耗
-
降低CPU利用率
-
-
易于部署
-
单个JAR文件
-
使用简单的配置句柄启用
-
更精细的调整
-
-
可扩展
-
可以逐步部署
-
可以限制为Shuffle密集型工作
-
有关如何调整系统的更多信息,请参阅此Wiki中提供的指南:
- 融合以太网上的RDMA参考部署指南(RoCE)通过Mellanox 100GbE网络加速了Apache Spark 2.2.0
- SparkRDMA配置属性的描述
- Mellanox网络适配器的推荐性能调整步骤
- 一般性能提示
- 故障排除指南
- 如何配置RDMA / RoCE
- https://www.iteblog.com/archives/1964.html
- https://www.openfabrics.org/images/eventpresos/2017presentations/108_Apache_YDegani.pdf
- https://community.mellanox.com/docs/DOC-3012
原文链接:https://insidehpc.com/2017/04/accelerating-apache-spark-rdma/