【问题标题】:How to repartition CassandraRDD in Apache Spark如何在 Apache Spark 中重新分区 CassandraRDD
【发布时间】:2015-04-03 09:18:48
【问题描述】:

我正在使用 三节点 Cassandra 集群和 六个 Spark Worker,每个都有 1 个核心2GB RAM . 使用 Spark 应用程序,我正在尝试从具有超过 300k 行的 Cassandra 表中获取全部数据并尝试进行一些聚合。

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

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

【问题讨论】:

    标签: java cassandra apache-spark datastax-java-driver rdd


    【解决方案1】:

    要调整 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 分区中。

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

    【讨论】:

    • 我已经设置了这个 --conf spark.cassandra.input.split.size_in_mb=32,我仍然在一个执行器中加载了大约 250 mb 的所有数据(约 400 万条记录)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多