美文网首页
Spark持久化级别

Spark持久化级别

作者: Caucher | 来源:发表于2020-11-01 15:42 被阅读0次

Spark相对于MR的一个先进点就是可以基于内存的高速运算,在Spark任务中,将那些多次复用的rdd进行缓存,可以有效的提升运算效率。

Spark的StorageLevel共有7个缓存级别:

  1. DISK_ONLY:缓存入硬盘。这个级别主要是讲那些庞大的Rdd,之后仍需使用但暂时不用的,放进磁盘,腾出Executor内存。
  2. DISK_ONLY_2:多一个缓存副本。
  3. MEMORY_ONLY:只使用内存进行缓存。这个级别最为常用,对于马上用到的高频rdd,推荐使用。
  4. MEMORY_ONLY_2:多一个缓存副本。
  5. MEMORY_AND_DISK:先使用内存,多出来的溢出到磁盘,对于高频的大rdd可以使用。
  6. MEMORY_AND_DISK_2:多一个缓存副本。
  7. OFF_HEAP:除了内存、磁盘,还可以存储在OFF_HEAP。

总的来说,StorageLevel就只有几个选项,Disk, Memory, offHeap, deserialized, replication

其中序列化可以把rdd变成字节数组,缩小存储开销,减少GC负担,但序列化无可避免的增加了一部分cpu开销,需要权衡使用。
OffHeap之后有空单独开个专题讲一下。

下面附上Pyspark源码。

class StorageLevel(object):

    """
    Flags for controlling the storage of an RDD. Each StorageLevel records whether to use memory,
    whether to drop the RDD to disk if it falls out of memory, whether to keep the data in memory
    in a JAVA-specific serialized format, and whether to replicate the RDD partitions on multiple
    nodes. Also contains static constants for some commonly used storage levels, MEMORY_ONLY.
    Since the data is always serialized on the Python side, all the constants use the serialized
    formats.
    """

    def __init__(self, useDisk, useMemory, useOffHeap, deserialized, replication=1):
        self.useDisk = useDisk
        self.useMemory = useMemory
        self.useOffHeap = useOffHeap
        self.deserialized = deserialized
        self.replication = replication

    def __repr__(self):
        return "StorageLevel(%s, %s, %s, %s, %s)" % (
            self.useDisk, self.useMemory, self.useOffHeap, self.deserialized, self.replication)

    def __str__(self):
        result = ""
        result += "Disk " if self.useDisk else ""
        result += "Memory " if self.useMemory else ""
        result += "OffHeap " if self.useOffHeap else ""
        result += "Deserialized " if self.deserialized else "Serialized "
        result += "%sx Replicated" % self.replication
        return result

StorageLevel.DISK_ONLY = StorageLevel(True, False, False, False)
StorageLevel.DISK_ONLY_2 = StorageLevel(True, False, False, False, 2)
StorageLevel.MEMORY_ONLY = StorageLevel(False, True, False, False)
StorageLevel.MEMORY_ONLY_2 = StorageLevel(False, True, False, False, 2)
StorageLevel.MEMORY_AND_DISK = StorageLevel(True, True, False, False)
StorageLevel.MEMORY_AND_DISK_2 = StorageLevel(True, True, False, False, 2)
StorageLevel.OFF_HEAP = StorageLevel(True, True, True, False, 1)

相关文章

  • Spark持久化级别

    Spark相对于MR的一个先进点就是可以基于内存的高速运算,在Spark任务中,将那些多次复用的rdd进行缓存,可...

  • 如何选择RDD持久化策略?

    Spark提供的多种持久化级别,主要是为了在CPU和内存消耗之间进行取舍。下面是一些通用的持久化级别的选择建议: ...

  • Spark RDD持久化级别

    RDD持久化用于RDD重用和节省重新计算,方便构建迭代算法,缓存粒度为整个RDD 持久化级别 如何选择存储级别? ...

  • 大数据入门:Spark持久化存储策略

    持久化存储是Spark非常重要的一个特性,通过持久化存储,提升Spark应用性能,以更好地满足实际需求。而Spar...

  • Spark相关文章索引(3)

    环境部署 Spark2.1.0的Standalone模式部署 基本常识 spark中的rdd的持久化 Spark入...

  • RDD持久化

    RDD持久化 Spark非常重要的一个功能特性就是可以将RDD持久化在内存中。当对RDD执行持久化操作时,每个节点...

  • 【5分钟背八股】redis持久化RDB和AOF?

    Redis 持久化 Redis 提供了不同级别的持久化方式: RDB持久化方式能够在指定的时间间隔能对你的数据进行...

  • Redis持久化

    一、Redis的持久化 Redis 提供了不同级别的持久化方式: RDB持久化方式能够在指定的时间间隔能对你的数据...

  • redis-05-持久化

    [TOC] 1 Redis持久化 持久化,顾名思义就是将数据存储到存储介质中。Redis 提供了不同级别的持久化方...

  • 23 redis的持久化

    Redis 提供了多种不同级别的持久化方式: 了解 RDB 持久化和 AOF 持久化之间的异同是非常重要的, 以下...

网友评论

      本文标题:Spark持久化级别

      本文链接:https://www.haomeiwen.com/subject/qvzyvktx.html