大数据平台通过三种主要机制确保容错性:数据复制、带有沿袭跟踪的检查点和分布式任务重试。这些策略可在发生硬件故障、网络问题或软件错误时最大限度地减少停机时间和数据丢失。 通过设计,这些系统假定故障是不可避免的,并专注于恢复而不是预防。
首先,数据复制是一项基础技术。 像 Hadoop HDFS 这样的平台会将数据的副本存储在多个节点或集群上。 例如,HDFS 默认将每个数据块复制到三个节点上。 如果一个节点发生故障,系统会将请求重定向到另一个副本,从而确保持续访问。 像 Amazon S3 这样的基于云的系统在可用区之间使用类似的复制。 这种冗余也有助于负载均衡,因为请求可以分布在各个副本之间,以防止出现瓶颈。 副本的数量及其放置策略通常是可配置的,从而允许开发人员在存储成本和可靠性需求之间取得平衡。
其次,检查点和沿袭跟踪有助于恢复计算进度。 Apache Spark 使用沿袭信息,通过重放原始数据集中的转换来重建丢失的数据。 但是,重新计算大型数据集可能非常耗时,因此 Spark 会定期将中间结果(检查点)保存到 HDFS 或 S3 等持久性存储中。 如果某个节点在处理过程中发生故障,则作业将从最后一个检查点恢复,而不是完全重新启动。 同样,像 Apache Flink 这样的流处理系统使用异步检查点来捕获状态快照,而无需挂起数据流。 这种方法可确保即使是有状态的计算(例如,窗口聚合)在发生故障后也能准确恢复。
最后,分布式处理框架会自动重试失败的任务。 在像 Hadoop 这样的 MapReduce 系统中,任务被分成更小的单元,并分布在各个工作节点上。 如果某个节点在任务执行过程中崩溃,调度程序会将该任务重新分配给另一个节点。 Kubernetes 通过在健康的节点上重新启动失败的 Pod,将此概念扩展到容器化环境。 某些系统(如 Apache Mesos)使用“推测执行”,如果某个节点看起来速度很慢,则启动重复的任务,并接受首先完成的任务的结果。 结合监控工具(例如,YARN 的 ResourceManager),这些重试机制可确保作业在没有人工干预的情况下完成,即使在间歇性故障期间也是如此。