我有 16 个节点可供使用,我正在使用 Spark、Cassandra 和 Spark-Cassandra 连接器 (SCC)。当对某些特定数据进行特定统计测试时,我想从时间角度评估这个集群的性能。因此,在我的一个场景中,我将 Spark 节点保持在最多 16 个,并开始向 Cassandra 环添加节点。添加的每个 Cassandra 节点都已经安装了 Spark,并且通过 RepartitionByCassandraReplica(RBCR) 我确保实现了数据局部性。我唯一改变的是复制因子。
时间如下:
number of Spark - Cassandra nodes | replication factor | Time
16 - 1 | 1 | 1.883 min
16 - 2 | 1 | 2.333 min
16 - 3 | 3 | 0.933 min
16 - 4 | 3 | 0.9 min
...
我的问题是为什么在第二种情况下我有 2 个 Cassandra 节点比第一种情况下有 1 个节点花费更多时间。我认为 Cassandra 节点越多,同时读取越多。那么复制因子是否起作用?如果是这样,怎么样?
我正在使用 RBCR,这意味着当我从 Cassandra 获取数据时,SCC 会从实际存储的节点询问数据。因此,我看不到复制因子如何影响它。
在我看来,您的测试存在缺陷。您需要一对一映射 Spark worker/executor 和 Cassandra 节点。
如您所知,只有当 Spark JVM 和 Cassandra JVM 位于同一个操作系统实例 (OSI) 中时,您才能实现数据局部性。在您的环境中,无法保证预定的工作程序/执行程序与 Cassandra 节点位于同一 OSI 上。干杯!