如何解决如果节点/分区发生故障,Spark如何确保数据一致性?
我们有一个在spark上运行的ETL作业,该作业从SQL Server读取数据。然后,通过应用mappartition对数据框执行一些转换,并创建具有不同架构的新数据框。完成一些进一步的转换,最后将结果数据帧写回到SQL Server。
我的问题是假设在将SQL Server中的数据插入8个分区中时,其中一个spark节点出现故障,spark如何确保数据完整性?其他分区将在数据库中插入数据,并且在发生故障时,数据库中的数据不一致。
spark只会通过应用所有转换来重新创建失败的分区吗?
万一再次失败,数据库中其他分区的数据将处于什么状态?
解决方法
简短回答。
如果您还没有检查站,
- 然后,因为您不是从源中读取可以跟踪最初使用的文件的信息-如果从源中重新计算-例如蜂巢表
- 将进行重新计算,并且对于后续的节点故障恢复,结果可能会有所不同-除非该源是静态的。
具有仍可以在其他位置读取的.cache和/或检查点,
- 我的理解是,您将获得相同的结果。
很难测试恕我直言。
加分
应用所有转换后的缓存不是标准的事情 去做。它是昂贵的。而且,由于内存问题甚至 存储问题,Spark可以逐出分区并返回源代码,因此 数据可能不同于先前的处理调用。而如果 如果您坚持不懈,并且节点在写入之前已关闭,则您丢失了 缓存。情况相同。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。