当Spark任务失败时,会出现重复记录。

3

当Spark任务失败并重新启动时,我在Cassandra表中遇到了重复记录。我正在尝试插入的表的模式如下。

CREATE TABLE duplicate_record (object_id bigint,entity_key timeuuid,
PRIMARY KEY (object_id, entity_key));

表中的样本重复记录

1181592431 uuid
1181592431 uuid1
8082869622 uuid2
8082869622 uuid3

我有一个由Oracle和Cassandra的左连接产生的df。因此,在Cassandra中已经存在记录,而新记录是由Oracle生成的。我对每条记录应用一个映射来查看entity_id是否存在。如果它存在,则使用它;否则,对于新记录创建一个新的entity_id,然后进行保存。我正在使用saveToCassandra将这个df插入到Cassandra中。
当任务失败并重新启动时,已经插入的记录会再次被插入,并带有不同的entity_key。我猜测在成功执行期间插入的记录在任务重新提交时不可用,导致重复记录的出现。

你是重启整个Spark任务还是只写入Cassandra部分?另外,你的复制因子和写入/读取一致性级别是多少? - nevsv
我们无法控制任务权利。Spark会从头重新启动整个任务。我的理解可能也有误。RF = 3,读/写的一致性级别为QUORUM。 - Sandeep Shetty
1
你的实体键是如何生成的?你能否让它们基于实际数据而不是每次随机创建吗? - RussS
我们可以根据实际数据生成它。在这种情况下,如果重新启动Spark任务时未获取插入的数据,则无法找到插入的数据。这会导致重复记录。我可能在这里漏掉了什么。更正之前提供的信息,CL为LOCAL_ONE,RF = 3。 - Sandeep Shetty
将CL更改为LOCAL_QUORUM,然后查看问题是否仍然存在。 - nevsv
1个回答

0

Spark的猜测执行可能会导致重复记录,因此请将其关闭。

如果仍然出现问题,则可能是由于某些Spark节点/任务重新启动导致的……关于重复记录提交的Spark错误在2.1.3版本中已解决: https://issues.apache.org/jira/browse/SPARK-24589

请确保您正在运行2.1.3+。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接