使用火花覆盖模式写入数据集将删除分区中的旧文件并写入新数据。这个过程是原子的吗?如果覆盖数据时作业失败,spark是否会还原分区中存在的旧文件?
发布于 2019-12-18 18:08:48
根据this在数据库中的帖子不是(emphasys我的):
有时以原子方式覆盖一组现有文件很有用。今天,Spark通过首先删除数据集,然后执行生成新数据的作业来实现覆盖。这会中断所有当前的读取器,并且不是容错。使用事务性提交,可以通过在提交时将文件标记为已删除,以原子方式“逻辑删除”文件
但它们也提供了一种实现原子覆盖的替代方案。
发布于 2020-05-08 22:01:01
覆盖操作是原子的,因为它首先删除旧的数据集,然后生成新的数据,但是,如果作业或任何任务失败,您可以丢失数据。此外,如果某个其他作业正在读取数据集,也将失败,因为文件已被删除。使用跨国提交,可以通过在提交时将文件标记为已删除,以原子方式“逻辑删除”文件。
可以通过将"spark.databricks.io.directoryCommit.enableLogicalDelete设置为true|false来切换原子覆盖“
https://stackoverflow.com/questions/59389070
复制相似问题