Cassandra阅读基准与Spark

时间:2015-07-09 07:40:32

标签: amazon-ec2 cassandra apache-spark benchmarking spark-cassandra-connector

我正在对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个线程,单节点集群的速度与更大的集群一样快或更快!!!



结果如图: enter image description here
数据集是簇大小(1/2/3/4),x轴是线程,y轴是ops / sec。

- >问题:这些结果是集群范围内的结果还是本地节点的测试(因此只有一个环的结果)

有人可以解释一下吗?谢谢!

1 个答案:

答案 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 *不像网络存储。