Spark源码学习(五)-存储与序列化
存储级别 StorageLevel
Spark提供了一个名为StorageLevel的单例对象。提供了控制RDD存储级别的标志信息:
- 标记RDD是否使用内存或ExternalBlockStore
- 如果RDD内存不足或ExternalBlcokStore,是否将其放入磁盘
- 是否将数据以序列化形式保存在内存中
- 是否在多个节点复制RDD分区
如果是创建自定义的存储级别对象,使用StorageLevel提供的工厂方法。
private def this(flags: Int, replication: Int) = {
this((flags & 8) != 0, (flags & 4) != 0, (flags & 2) != 0, (flags & 1) != 0, replication)
}
内部标志变量, 由四个Bool型和一个整型进行构造:
- useDisk(Boolean),是否使用磁盘 传入flags 与8取与运算;
- useMemory(Boolean),是否使用内存 传入flags 与4取与运算;
- useOffHeap,(Boolean) 是否使用堆外内存 传入flags 与2取与运算;
- deserialized(Boolean) 是否开启反序列化 传入flags 与1取与运算;
- replication: 副本数量(默认值为1),必须小于40.
根据 useOffHeap
加工的 memoryMode
方法返回的 MemoryMode.ON_HEAP 和 MemoryMode.OFF_HEAP .
参数有效性, useMemory 和 useDisk 必须至少有一个为true。
object StorageLevel
- DISK_ONLAY 分为 3个子级别
- DISK_ONLY: 只开了 useDisk 开关
- DISK_ONLY2
- DISK_ONLY3
- MEMORY_ONLY 细分为