我正在使用带有Spark Cassandra Connector的Apache Spark将数百万行写入Cassandra集群。复制因子设置为 3,我使用以下选项在 Spark-submit(YARN 客户端模式(中将写入一致性设置为 ALL:
spark-submit ...
--conf spark.cassandra.output.consistency.level=ALL
--conf spark.cassandra.output.concurrent.writes=1
--conf spark.cassandra.output.batch.size.bytes=20000
...
然后,我编写了另一个 Spark 作业来计算我写入的数据。我设置了新作业的一致性,如下所示:
spark-submit ...
--conf spark.cassandra.input.consistency.level=ONE
--conf spark.cassandra.input.split.size=50000
...
从文档中看,如果写入一致性加上读取一致性大于复制因子,则我应该具有一致的读取。
但是我得到以下结果:
- 每次运行读取作业时都会给我不同的结果(计数(
- 如果我增加读取作业的一致性级别,我会得到预期的结果
我错过了什么?是否有任何默认设置的秘密配置(例如,如果在写入过程中出现问题,然后降低一致性级别,或类似的东西......(或者我使用的是 Cassandra 的错误版本(它是 2.1.2(,或者 spark-cassandra-connector 用于将数据保存到 Cassandra 的批处理更新是否存在问题(我只是使用"saveToCassandra"方法(?
出了什么问题?
我确认这是连接器中的一个错误。一致性级别是在单个预准备语句上设置的,并且在我们使用批处理语句时被忽略。按照连接器上的更新进行操作 - 修复程序将包含在下一个错误修复版本中。