我是Spark / Spark Cassandra Connector的新手。我们正在团队中第一次尝试火花,我们正在使用spark cassandra连接器连接到cassandra数据库。
我写了一个查询,它使用了一个繁重的数据库表,我看到Spark任务没有启动,直到对该表的查询获取了所有记录。
从数据库中获取所有记录需要3个多小时。
从我们使用的数据库中获取数据。
CassandraJavaUtil.javaFunctions(sparkContextManager.getJavaSparkContext(SOURCE).sc())
.cassandraTable(keyspaceName, tableName);
即使所有数据都没有完成下载,有没有办法告诉spark开始工作?
是否可以选择告诉spark-cassandra-connector使用更多线程进行获取?
感谢, 科库·
答案 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
设置为更高的解决方法。