[Spark进阶]--Spark RDMA技术

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中提供的指南:

原文链接:https://insidehpc.com/2017/04/accelerating-apache-spark-rdma/

猜你喜欢

转载自blog.csdn.net/high2011/article/details/83894342