spark datasax cassandra连接器从重cassandra表慢读

时间:2015-08-05 20:19:42

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

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

我写了一个查询,它使用了一个繁重的数据库表,我看到Spark任务没有启动,直到对该表的查询获取了所有记录。

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

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

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

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

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

感谢, 科库·

1 个答案:

答案 0 :(得分:3)

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

Iterate large Cassandra table in small chunks

Set number of tasks on Cassandra table scan

修改

在做了一些关于摆弄一些Spark配置参数的性能测试后,我发现当我没有给Spark执行器足够的内存时,Spark创建了太多的表分区。在我的情况下,将内存增加一千兆字节就足以渲染输入分割大小参数。如果您无法为执行程序提供更多内存,则可能仍需要将spark.cassandra.input.split.size_in_mb设置为更高的解决方法。