当特定任务失败导致 RDD 从 lineage 重新计算(可能通过再次读取输入文件)时,Spark 如何确保没有重复处理数据?如果失败的任务已将一半数据写入 HDFS 或 Kafka 等输出怎么办?它会再次重写那部分数据吗?这与仅一次处理有关吗?
问问题
59 次
1 回答
0
默认情况下,输出操作具有至少一次语义。如果 worker 失败,foreachRDD 函数将执行多次,从而将相同的数据多次写入外部存储。有两种方法可以解决这个问题,幂等更新和事务更新。它们将在以下各节中进一步讨论
进一步阅读
http://shzhangji.com/blog/2017/07/31/how-to-achieve-exactly-once-semantics-in-spark-streaming/
于 2021-06-12T18:37:57.730 回答