我是Spark / Spark Cassandra Connector的新手 . 我们正在团队中第一次尝试火花,我们正在使用spark cassandra连接器连接到cassandra数据库 .
我写了一个查询,它正在使用数据库的重表,我看到Spark任务没有启动,直到对表的查询获取所有记录 .
从数据库中获取所有记录只需要3个多小时 .
从我们使用的数据库中获取数据 .
CassandraJavaUtil.javaFunctions(sparkContextManager.getJavaSparkContext(SOURCE).sc())
.cassandraTable(keyspaceName, tableName);
即使所有数据都没有完成下载,有没有办法告诉火花开始工作?
有没有选项告诉spark-cassandra-connector使用更多线程进行获取?
谢谢,kokou .
1 回答
如果查看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
EDIT:
关于摆弄一些Spark配置参数做了一些性能测试之后,我发现当我没有给执行者提供更多内存时,Spark创建了太多的表分区,你可能仍然需要将
spark.cassandra.input.split.size_in_mb
设置为更高的一种形式的变通方法 .