简述Spark中7种存储级别 ?

在 Apache Spark 中,提供了多种存储级别供用户选择,以便根据不同的使用场景优化存储和计算性能。这些存储级别主要影响 RDD 的持久化(缓存)。以下是 Spark 中可用的七种存储级别:

  1. MEMORY_ONLY
    • 在这个级别,RDD 被存储在 JVM 的堆内存中。如果内存不足以存储整个 RDD,未被存储的部分将在需要时重新计算。
    • 这是默认的存储级别。
  2. MEMORY_AND_DISK
    • 在这个级别,RDD 首先被尝试存储在内存中。如果内存不足,那么无法存储在内存中的分区将被存储到磁盘上。
    • 这个级别适用于那些即使部分数据不在内存中也不能承受重新计算成本的场景。
  3. MEMORY_ONLY_SER(或 MEMORY_ONLY_2):
    • 在这个级别,RDD 被序列化并存储在内存中。序列化可以减少内存的使用量,但读取时需要反序列化,这会增加CPU的使用。
    • MEMORY_ONLY_2 表示每个 RDD 的分区会在两个不同的节点上存储两份副本。
  4. MEMORY_AND_DISK_SER(或 MEMORY_AND_DISK_2):
    • 类似于 MEMORY_ONLY_SER,但是当内存不足以存储序列化的 RDD 时,未存储的部分会存储在磁盘上。
    • MEMORY_AND_DISK_2 同样存储两份副本。
  5. DISK_ONLY
    • 在这个级别,RDD 完全存储在磁盘上。如果内存资源非常有限,这个选项可能很有用。
  6. MEMORY_ONLY_2DISK_ONLY_2
    • 这些是 MEMORY_ONLY 和 DISK_ONLY 的副本级别。在这些级别上,RDD 的每个分区在集群的两个不同节点上存储两份副本。
    • 这增加了容错性,但也需要更多的存储空间。

每种存储级别都有其优点和缺点。选择合适的存储级别取决于应用的具体需求,如内存大小、处理速度和数据的重要性等。例如,如果快速数据访问是首要考虑,并且内存资源充足,可以选择 MEMORY_ONLY;如果内存资源有限,但希望避免数据重新计算的开销,可以选择 MEMORY_AND_DISK。

发表评论

后才能评论