我正在使用最新的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
}
答案 0 :(得分:0)
在不了解您的服务器的情况下,只需要一小段配置,我就会坚持一些可以改善您体验的通用建议。
磁盘IO
您明确受到storage media的读取速度的约束,您宣布它是一个文件。如果您要存储data on disk,则可以在storage-engine device
配置块中使用file
或device
。
HDD上的文件与原始设备访问SSD之间的读写延迟有很大差异。通常,Aerospike与存储在enterprise-grade SSD设备上的数据一起使用。请阅读操作手册中有关驱动器initializing和setting 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。