【问题标题】:spark datasax cassandra connector slow to read from heavy cassandra tablespark datasax cassandra 连接器从沉重的 cassandra 表中读取速度很慢
【发布时间】:2015-10-28 19:04:57
【问题描述】:

我是 Spark/Spark Cassandra 连接器的新手。我们在团队中第一次尝试使用 spark,我们正在使用 spark cassandra 连接器连接到 cassandra 数据库。

我写了一个查询,它使用了一个庞大的数据库表,我看到 Spark 任务直到查询到表的所有记录才开始。

仅从数据库中获取所有记录就需要 3 个多小时。

从我们使用的数据库中获取数据。

  CassandraJavaUtil.javaFunctions(sparkContextManager.getJavaSparkContext(SOURCE).sc())
    .cassandraTable(keyspaceName, tableName);

即使所有数据都没有完成下载,有没有办法告诉 spark 开始工作?

是否可以选择告诉 spark-cassandra-connector 使用更多线程进行提取?

谢谢, kokou。

【问题讨论】:

    标签: apache-spark spark-streaming apache-spark-sql spring-data-cassandra spark-cassandra-connector


    【解决方案1】:

    如果您查看 Spark UI,您的表扫描创建了多少个分区?我刚刚做了这样的事情,我发现 Spark 为扫描创建了太多分区,因此需要更长的时间。我减少工作时间的方法是将配置参数spark.cassandra.input.split.size_in_mb 设置为高于默认值的值。就我而言,它需要 20 分钟的工作时间缩短到大约 4 分钟。还有更多 Cassandra 读取特定 Spark 变量,您可以在 here 中设置这些变量。 这些stackoverflow问题是我最初引用的,我希望它们也能帮助你。

    Iterate large Cassandra table in small chunks

    Set number of tasks on Cassandra table scan

    编辑:

    在对修改一些 Spark 配置参数进行了一些性能测试后,我发现当我没有为 Spark 执行程序提供足够的内存时,Spark 创建了太多的表分区。在我的情况下,将内存增加 1 GB 足以使输入拆分大小参数变得不必要。如果你不能给执行者更多的内存,你可能仍然需要设置spark.cassandra.input.split.size_in_mbhigher 作为一种解决方法。

    【讨论】:

      猜你喜欢
      • 2020-08-02
      • 2014-03-15
      • 2016-08-14
      • 2016-01-05
      • 2017-05-30
      • 2015-10-28
      • 1970-01-01
      • 2017-03-04
      • 1970-01-01
      相关资源
      最近更新 更多