【问题标题】:Cassandra Reading Benchmark with SparkCassandra 使用 Spark 阅读基准
【发布时间】:2015-09-27 10:47:04
【问题描述】:

我正在对 Cassandra 的阅读性能进行基准测试。在测试设置步骤中,我创建了一个包含 1 / 2 / 4 个 ec2 实例和数据节点的集群。我写了一张包含 1 亿个条目的表(~3 GB csv 文件)。然后我启动一个 Spark 应用程序,它使用 spark-cassandra-connector 将数据读入 RDD。

但是,我认为行为应该如下:Cassandra(Spark 上的实例数量相同)使用的实例越多,读取速度就越快!通过写入,一切似乎都是正确的(如果集群大 2 倍,则速度快 2 倍)。

但是:在我的基准测试中,1-instance-cluster 的读取速度总是比 2-或 4-instance-cluster 快!!!

我的基准测试结果:

集群大小 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。

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

谁能解释一下?谢谢!

【问题讨论】:

  • 您是否在每个 Cassandra 节点上运行 spark worker 实例?
  • 不,我已经设置了彼此分离的集群。所以我有一个带有 1 / 2 / 4 个 Workernode 的 Spark 集群和一个带有 1 / 2 / 4 个节点的 Cassandra 集群。

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


【解决方案1】:

我在每个 Cassandra 节点上运行一个 spark worker 进行了类似的测试。

使用一个有 1500 万行(大约 1.75 GB 数据)的 Cassandra 表,我运行了一个 spark 作业,从表中创建一个 RDD,每行作为一个字符串,然后打印行数。

这是我得到的时间:

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* 不喜欢网络存储。

【讨论】:

  • 由于数据局部性和集群景观是另一个问题中的问题,stackoverflow.com/questions/31336753/… 我认为这些步骤在这里也会有所帮助(正如您所描述的 Jim)。我稍后会尝试,谢谢你的线索,吉姆!
猜你喜欢
  • 2016-10-03
  • 2015-12-03
  • 1970-01-01
  • 2018-03-26
  • 2019-01-07
  • 2022-07-27
  • 2014-01-31
  • 2018-12-03
  • 2016-05-02
相关资源
最近更新 更多