Java 如何在ApacheSpark中重新分区CassandraRDD
我使用的是三节点Cassandra集群,有六个Spark Worker,每个都有一个内核和2GB内存。 使用Spark应用程序,我尝试从Cassandra表中获取整个数据,该表有超过300k行,并尝试进行一些聚合 但是从卡桑德拉那里获取数据需要很多时间。我还浏览了Spark UI,我看到Spark stage有3个分区,其中两个分区执行得非常快(在几秒钟内),但第三个分区执行时间很长(7分钟)Java 如何在ApacheSpark中重新分区CassandraRDD,java,cassandra,apache-spark,datastax-java-driver,rdd,Java,Cassandra,Apache Spark,Datastax Java Driver,Rdd,我使用的是三节点Cassandra集群,有六个Spark Worker,每个都有一个内核和2GB内存。 使用Spark应用程序,我尝试从Cassandra表中获取整个数据,该表有超过300k行,并尝试进行一些聚合 但是从卡桑德拉那里获取数据需要很多时间。我还浏览了Spark UI,我看到Spark stage有3个分区,其中两个分区执行得非常快(在几秒钟内),但第三个分区执行时间很长(7分钟) 我还尝试重新划分CassandraRDD,以增加任务数量并将任务分配给所有六名员工,但没有找到任何解决
我还尝试重新划分CassandraRDD,以增加任务数量并将任务分配给所有六名员工,但没有找到任何解决方案。要调整CassandraRDD创建的任务数量,需要调整spark.cassandra.input.split.size。这决定了实际的Spark分区数量
spark.cassandra.input.split.size approx number of Cassandra partitions in a Spark partition 100000
注意,这控制了spark分区中C*分区的数量,而不是C*行的数量。这也是一个估计值,因此不能保证spark分区中的令牌的确切数量
如果您继续看到某些分区的运行速度比其他分区慢,我将调查该分区的节点运行状况,并检查热点 我已经设置了这个--conf spark.cassandra.input.split.size_in_mb=32,但我大约250 mb的所有数据都加载在一个执行器中(约400万条记录),请参考此