我正在使用最新的AeroSpark连接器来处理AeroSpike和Spark ML。但是当我在AeroSpike中插入大约60M条记录时,我在读取操作中获得了太多的时间。例如,对于从包含60M条记录的集合中获取500K记录,AeroSpark大约需要30分钟。当我查看htop cmd输出时,AeroSpike只使用了7%的CPU。
每一轮记录包含1k的数据。AeroSpike和Spark托管在同一节点上。按辅助索引筛选的数据。
如何提高读取操作的性能?似乎AeroSpark只由一个线程工作,我如何并行化这个作业?有什么建议吗?
AeroSpike会议:
memory-size 8G
default-ttl 30d
storage-engine device {
file /vol/rmla.data
filesize 900G
}发布于 2017-01-21 03:39:08
在不了解您的服务器的情况下,我将坚持一些一般性的建议,这些建议可以改善您的体验。
磁盘IO
您显然受到从storage media读取速度的限制,因为您声明它是一个文件。如果要存储data on disk,可以在storage-engine device配置块中使用file或device。
硬盘上的文件与原始设备访问SSD之间的读取和写入延迟存在很大差异。通常,航空派克与存储在enterprise-grade固态硬盘设备上的数据一起使用。阅读操作手册中有关initializing和setting up驱动器的章节。使用为命名空间声明多个设备会带来线性性能提升(两个驱动器的读写吞吐量是同类驱动器的两倍)。
在Amazon EC2中,您可以使用c3、i2、r3或i3实例族来实现此目的。EC2实例的临时固态硬盘设备无需过度配置、关闭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。确保您使用的是最新的代码。
备注:可在航空公司网站上查看新的tutorial。
https://stackoverflow.com/questions/38867336
复制相似问题