我们使用datastax spark cassandra连接器来写入部署在不同于spark的集群上的cassandra集群。
我们观察到,对于大容量负载,即~500m记录,我们的写入运行时间为(~1小时),在写入过程中,读取性能下降。虽然写性能相当好,但这在我们的环境中是不可接受的,因为有些读取请求非常关键,应该总是在特定的时间范围内响应。
我读了一篇关于ssl表加载器用例的文章,它似乎通过使用ssltableloader(cassandrabulkloader)解决了同样的问题。
我也读了一些类似这样的问题,提到使用ssltableloader与spark cassandra连接器相比,write的速度非常慢。
现在,是什么潜在的原因使spark cassandra连接器更快,但导致批量加载的低读取延迟?另外,ssltableloader除了速度慢之外还有其他缺点吗?
1条答案
按热度按时间ohfgkhjo1#
这是一种正常的情况—如果您以尽可能快的速度写入数据,它会在磁盘系统上产生负载,并且您的读取速度会变慢。除了将数据写入磁盘之外,还需要考虑到压缩之类的操作给io系统带来的额外负载。也有可能压缩吞吐量不是很好,因此压缩可能会滞后,这可能会导致额外的读取延迟,因为您有太多的sstable文件。
你不需要使用
sstableloader
用于数据加载。您只需调整写入参数,这样spark就不会使节点过载。例如,这可能包括以下参数:spark.cassandra.output.concurrent.writes
-将其减少到2或3,而不是默认的5-这将增加加载时间,但应该会减少服务器的负载也许是调子
spark.cassandra.output.throughputMBPerSec
,但我建议从前面的选项开始。批量加载数据的另一个选项是datastax的dsbulk,它可以从csv和json文件加载数据。默认情况下,它还尝试以尽可能快的速度加载数据,但它有控制吞吐量的选项。