3

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

我写了一个查询,该查询使用了一个沉重的数据库表,我看到 Spark Task 直到对表的查询获取所有记录后才开始。

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

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

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

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

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

谢谢,kokou。

4

1 回答 1

3

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

以小块迭代大型 Cassandra 表

设置 Cassandra 表扫描的任务数

编辑:

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

于 2015-08-05T21:29:57.667 回答