如何提高AeroSpark的读取性能?

时间:2016-08-10 07:52:40

标签: performance apache-spark spark-dataframe aerospike

我正在使用最新的AeroSpark连接器与AeroSpike和Spark ML配合使用。但是当我向AeroSpike插入60M的圆形记录时,我在读取操作中的时间量太大了。例如,对于从包含60M记录的集合中获取500K记录,AeroSpark花费约30分钟。当我查看htop cmd输出时,AeroSpike仅使用7%的CPU。

每轮记录包含1k数据。 AeroSpike和Spark托管在同一节点上。数据按二级索引过滤。

如何加快读取操作的性能?似乎AeroSpark只能通过一个线程工作,我如何并行化这项工作?有什么建议吗?

AeroSpike conf:

memory-size 8G
default-ttl 30d
storage-engine device {
    file /vol/rmla.data
    filesize 900G
}

1 个答案:

答案 0 :(得分:0)

在不了解您的服务器的情况下,只需要一小段配置,我就会坚持一些可以改善您体验的通用建议。

磁盘IO

您明确受到storage media的读取速度的约束,您宣布它是一个文件。如果您要存储data on disk,则可以在storage-engine device配置块中使用filedevice

HDD上的文件与原始设备访问SSD之间的读写延迟有很大差异。通常,Aerospike与存储在enterprise-grade SSD设备上的数据一起使用。请阅读操作手册中有关驱动器initializingsetting up的部分。为命名空间声明多个设备可以提高线性性能(两个驱动器的读写吞吐量是同类产品的两倍)。

Amazon EC2中,您可以使用c3,i2,r3或i3实例系列来实现此目的。 EC2实例的短暂SSD设备不需要过度配置,关闭RAID等等。它们只需在首次使用之前进行初始化。不要将EBS驱动器用于主存储,因为它们太慢了。

群集配置

Spark连接器使用大量扫描操作。确保您已将service配置块下的scan-threads配置为核心数。如果您不知道自己拥有多少核心,请执行cat /proc/cpuinfo。如果Spark是唯一使用Aerospike集群的客户端,则可以将扫描线程调高。

连接器配置

您可以修改连接器config options以降低写入延迟。 (可选)将aerospike.commitLevel设置为CommitLevel.COMMIT_MASTER

升级版本

截至2016年11月28日aerospike/aerospark支持Spark 2.0。确保您使用的是最新代码。

注意:在Aerospike网站上查看Aerospark的新tutorial