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