gpt4 book ai didi

apache-spark - Spark检查点和持久化到磁盘有什么区别

转载 作者:行者123 更新时间:2023-12-03 05:56:33 25 4
gpt4 key购买 nike

spark 检查点和持久化到磁盘有什么区别。这些都存储在本地磁盘吗?

最佳答案

几乎没有什么重要的区别,但最根本的区别是血统方面发生的情况。 持久/缓存保持沿袭完整,而检查点破坏沿袭。让我们考虑以下示例:

import org.apache.spark.storage.StorageLevel

val rdd = sc.parallelize(1 to 10).map(x => (x % 3, 1)).reduceByKey(_ + _)
  • 缓存/持久:

    val indCache  = rdd.mapValues(_ > 4)
    indCache.persist(StorageLevel.DISK_ONLY)

    indCache.toDebugString
    // (8) MapPartitionsRDD[13] at mapValues at <console>:24 [Disk Serialized 1x Replicated]
    // | ShuffledRDD[3] at reduceByKey at <console>:21 [Disk Serialized 1x Replicated]
    // +-(8) MapPartitionsRDD[2] at map at <console>:21 [Disk Serialized 1x Replicated]
    // | ParallelCollectionRDD[1] at parallelize at <console>:21 [Disk Serialized 1x Replicated]

    indCache.count
    // 3

    indCache.toDebugString
    // (8) MapPartitionsRDD[13] at mapValues at <console>:24 [Disk Serialized 1x Replicated]
    // | CachedPartitions: 8; MemorySize: 0.0 B; ExternalBlockStoreSize: 0.0 B; DiskSize: 587.0 B
    // | ShuffledRDD[3] at reduceByKey at <console>:21 [Disk Serialized 1x Replicated]
    // +-(8) MapPartitionsRDD[2] at map at <console>:21 [Disk Serialized 1x Replicated]
    // | ParallelCollectionRDD[1] at parallelize at <console>:21 [Disk Serialized 1x Replicated]
  • 检查点:

    val indChk  = rdd.mapValues(_ > 4)
    indChk.checkpoint

    indChk.toDebugString
    // (8) MapPartitionsRDD[11] at mapValues at <console>:24 []
    // | ShuffledRDD[3] at reduceByKey at <console>:21 []
    // +-(8) MapPartitionsRDD[2] at map at <console>:21 []
    // | ParallelCollectionRDD[1] at parallelize at <console>:21 []

    indChk.count
    // 3

    indChk.toDebugString
    // (8) MapPartitionsRDD[11] at mapValues at <console>:24 []
    // | ReliableCheckpointRDD[12] at count at <console>:27 []

正如您所看到的,在第一种情况下,即使从缓存中获取数据,沿袭也会被保留。这意味着如果indCache的某些分区丢失,数据可以从头开始重新计算。在第二种情况下,谱系在检查点之后完全丢失,并且 indChk 不再携带重建它所需的信息。

checkpointcache/persist 不同,是与其他作业分开计算的。这就是为什么标记为检查点的 RDD 应该被缓存:

It is strongly recommended that this RDD is persisted in memory, otherwise saving it on a file will require recomputation.

最后,检查点数据是持久的,并且在SparkContext被销毁后不会被删除。

关于RDD.checkpoint使用的数据存储SparkContext.setCheckpointDir,如果在非本地模式下运行,则需要DFS路径。否则它也可以是本地文件系统。没有复制的 localCheckpointpersist 应使用本地文件系统。

重要说明:

RDD 检查点与 Spark Streaming 中的检查点是不同的概念。前者旨在解决沿袭问题,后者则与流可靠性和故障恢复有关。

关于apache-spark - Spark检查点和持久化到磁盘有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35127720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com