Cassandra spark 连接器数据丢失
Cassandra spark connector data loss
最近我们使用 datastax spark connector 计算了一些统计数据。
重复查询在每次执行时返回不同的结果。
背景:我们有大约。 3 节点 cassandra 集群中的 112K 条记录。 table 具有名为 guid
的单个分区键 UUID
列,并且没有集群键列。
这是一个简单的 guid
提取器,我定义它来检查损失:
val guids = sc.cassandraTable[UUID]("keyspace","contracts").select("guid")
接下来我反复多次提取数据到本地集合
val gss = List.fill(20)(Set(guids.collect():_*))
val gsall = gss reduce (_ | _)
val lost = gss map (gsall &~ _ size)
结果lost
是List(5970, 7067, 6926, 6683, 5807, 7901, 7005, 6420, 6911, 6876, 7038, 7914, 6562, 6576, 6937, 7116, 7374, 6836, 7272, 7312)
所以每次查询我们都有 6,17±0,47%
数据丢失
会不会是cassandra、spark或者connector的问题?在每种情况下 - 是否存在一些配置方法来防止这种情况?
我读过 some docs 并了解到可以而且应该为这种情况设置阅读一致性级别。
声明后
implicit val readConf = ReadConf.fromSparkConf(sc.getConf).copy(
consistencyLevel = ConsistencyLevel.ALL)
我得到了稳定的结果。
最近我们使用 datastax spark connector 计算了一些统计数据。 重复查询在每次执行时返回不同的结果。
背景:我们有大约。 3 节点 cassandra 集群中的 112K 条记录。 table 具有名为 guid
的单个分区键 UUID
列,并且没有集群键列。
这是一个简单的 guid
提取器,我定义它来检查损失:
val guids = sc.cassandraTable[UUID]("keyspace","contracts").select("guid")
接下来我反复多次提取数据到本地集合
val gss = List.fill(20)(Set(guids.collect():_*))
val gsall = gss reduce (_ | _)
val lost = gss map (gsall &~ _ size)
结果lost
是List(5970, 7067, 6926, 6683, 5807, 7901, 7005, 6420, 6911, 6876, 7038, 7914, 6562, 6576, 6937, 7116, 7374, 6836, 7272, 7312)
所以每次查询我们都有 6,17±0,47%
数据丢失
会不会是cassandra、spark或者connector的问题?在每种情况下 - 是否存在一些配置方法来防止这种情况?
我读过 some docs 并了解到可以而且应该为这种情况设置阅读一致性级别。 声明后
implicit val readConf = ReadConf.fromSparkConf(sc.getConf).copy(
consistencyLevel = ConsistencyLevel.ALL)
我得到了稳定的结果。