我正在对Cassandra的阅读表现进行基准测试。在测试设置步骤中,我创建了一个具有1/2/4 ec2-instances和数据节点的集群。我写了1个包含1亿条目的表(~3 GB csv文件)。然后我启动一个Spark应用程序,它使用spark-cassandra-connector将数据读入RDD。
但是,我认为行为应该如下:Cassandra(Spark上的实例数量相同)使用的实例越多,读取的速度就越快!写入一切似乎都是正确的(如果群集大2倍,则快2倍)。
但是:在我的基准测试中,使用1实例集群然后使用2或4实例集群,读取总是更快!!!
我的基准测试结果:
群集大小4:写入:1750秒/读取:360秒
群集大小2:写入:3446秒/读取:420秒
群集大小1:写入:7595秒/读取: 284秒
其他尝试 - 使用CASSANDRA-Stress工具
我在Cassandra集群(大小为1/2/3/4节点)上启动了“cassandra-stress”工具,结果如下:
Clustersize Threads Ops/sek Time
1 4 10146 30,1
8 15612 30,1
16 20037 30,2
24 24483 30,2
121 43403 30,5
913 50933 31,7
2 4 8588 30,1
8 15849 30,1
16 24221 30,2
24 29031 30,2
121 59151 30,5
913 73342 31,8
3 4 7984 30,1
8 15263 30,1
16 25649 30,2
24 31110 30,2
121 58739 30,6
913 75867 31,8
4 4 7463 30,1
8 14515 30,1
16 25783 30,3
24 31128 31,1
121 62663 30,9
913 80656 32,4
结果:对于4个或8个线程,单节点集群的速度与更大的集群一样快或更快!!!
结果如图:
数据集是簇大小(1/2/3/4),x轴是线程,y轴是ops / sec。
- >问题:这些结果是集群范围内的结果还是本地节点的测试(因此只有一个环的结果)
有人可以解释一下吗?谢谢!
答案 0 :(得分:2)
我在每个Cassandra节点上运行一个火花工作者进行了类似的测试。
使用一个包含1500万行(约1.75 GB数据)的Cassandra表,我运行了一个spark作业,从表中创建一个RDD,每行作为一个字符串,然后打印一个行数的计数。 / p>
以下是我得到的时间:
1 C* node, 1 spark worker - 1 min. 42 seconds
2 C* nodes, 2 spark workers - 55 seconds
4 C* nodes, 4 spark workers - 35 seconds
因此,当spark worker与C *节点位于同一位置时,似乎可以很好地扩展节点数。
通过不与Cassandra共同定位您的工作人员,您正在强制所有表数据通过网络。这将是缓慢的,也许在您的环境中是一个瓶颈。如果您共同定位它们,那么您将受益于数据局部性,因为spark将从每台机器本地的令牌创建RDD分区。
您可能还有其他一些瓶颈。我不熟悉EC2及其提供的内容。希望它有本地磁盘存储而不是网络存储,因为C *不像网络存储。