如何在 Apache Spark 中重新分区 CassandraRDD

How to repartition CassandraRDD in Apache Spark

我正在使用 三节点 Cassandra 集群和 6 个 Spark Worker,每个都有 1 个核心2GB RAM。 使用 Spark 应用程序,我试图从 Cassandra Table 中获取整个数据,其中包含超过 300k 行并尝试进行一些聚合。

但是从 Cassandra 获取数据需要花费很多时间。我还浏览了 Spark UI,我看到 Spark 阶段有 3 个分区 ,其中两个执行速度非常快(几秒内),但第三个执行时间很长(7分钟)。

我也尝试重新分区 CassandraRDD 以增加任务数量并将任务分配给所有六个工人,但没有找到任何解决方案。

要调整 CassandraRDD 创建的任务数,您需要调整 spark.cassandra.input.split.size。这决定了将创建多少个实际的 Spark 分区。

spark.cassandra.input.split.size    approx number of Cassandra partitions in a Spark partition  100000

请注意,这控制的是 C* 分区的数量,而不是 spark 分区中的 C* 行数。这也是一个估计,因此您不能保证这个确切数量的令牌将在 spark 分区中。

如果您继续看到某些分区的运行速度比其他分区慢,我会调查该分区的节点运行状况,并检查热点。