Kay*_*ayV 4 failover apache-spark spark-streaming rdd
假设我们有一个 RDD,它被多次使用。因此,为了一次又一次地保存计算,我们使用 rdd.persist() 方法持久化了这个 RDD。
所以当我们持久化这个 RDD 时,计算 RDD 的节点将存储它们的分区。
那么现在假设,包含这个 RDD 持久分区的节点失败了,那么会发生什么?Spark 如何恢复丢失的数据?有没有复制机制?还是其他什么机制?
当您执行 rdd.persist 时,rdd 不会具体化内容。它会在您对 rdd 执行操作时执行。它遵循相同的惰性求值原则。
现在,RDD 知道它应该在哪个分区上运行以及与之关联的 DAG。使用 DAG,它完全能够重新创建物化分区。
因此,当一个节点出现故障时,驱动程序会在其他某个节点中生成另一个执行程序,并为它提供它应该在其上工作的数据分区以及在闭包中与其关联的 DAG。现在有了这些信息,它可以重新计算数据并将其具体化。
同时,RDD 中缓存的数据不会在内存中包含所有数据,它必须从磁盘获取丢失节点的数据将花费更多时间。
在复制方面,是的 spark 支持内存复制。持久化时需要设置 StorageLevel.MEMORY_DISK_2 。
rdd.persist(StorageLevel.MEMORY_DISK_2)
Run Code Online (Sandbox Code Playgroud)
这确保数据被复制两次。
| 归档时间: |
|
| 查看次数: |
3146 次 |
| 最近记录: |