Spark持久化级别

Spark最重要的一个功能,就是在不同操作间,持久化(或缓存)一个数据集在内存中。当你持久化一个RDD,每一个结点都将

把它的计算分块结果保存在内存中,并在对此数据集(或者衍生出的数据集)进行的其它动作中重用。这将使得后续的动作

(Actions)变得更加迅速(通常快10倍)。缓存是用Spark构建迭代算法的关键。

 

在Spark中,cache和persist用于将RDD持久化到缓存中

其中cache采取persist的默认存储级别StorageLevel.MEMORY_ONLY

def cache(): this.type = persist()

def persist(): this.type = persist(StorageLevel.MEMORY_ONLY)

def persist(newLevel:StorageLevel):this.type = {

    if(isLocallyCheckpointed){
        
        persist(LocalRDDCheckpointData.transformStorageLevel(newLevel),allowOverride = true)

    } else {
           
        persist(newLevel, allowOverride = false)

    }    

}

 

StorageLevel支持多种持久化级别

package org.apache.spark.api.java;

import org.apache.spark.storage.StorageLevel;

public class StorageLevels {
    
    public static final StorageLevel NONE = create(false,false,false,false,1);
    public static final StorageLevel DISK_ONLY = create(true,false,false,false,1);
    public static final StorageLevel DISK_ONLY_2 = create(true,false,false,false,2);
    public static final StorageLevel MEMORY_ONLY = create(false,true,false,true,1);
    public static final StorageLevel MEMORY_ONLY_2 = create(false,true,false,true,2);
    public static final StorageLevel MEMORY_ONLY_SER = create(false,true,false,false,1);
    public static final StorageLevel MEMORY_ONLY_SER_2 = create(false,true,false,false,2);
    public static final StorageLevel MEMORY_AND_DISK = create(true,true.false,true,1);
    public static final StorageLevel MEMORY_AND_DISK_2 = create(true,true,false,true,2);
    public static final StorageLevel MEMORY_AND_DISK_SER =  create(true,true,false,false,1);
    public static final StorageLevel MEMORY_AND_DISK_SER_2 = create(true,true,false,false,2);
    public static final StorageLevel OFF_HEAP = create(true,true,true,false,1);


    public static StorageLevel create(
        boolean useDisk,
        boolean useMemory,
        boolean useOffHeap,
        boolean deserialized,
        int replication) {
            return StorageLevel.apply(useDisk,useMemory,useOffHeap,
            deserialized,replication);
        }

}

 

不同持久化级别的性能比较,存储级别末尾加上“_2”来将持久化数据存为两份

级别 内存空间 CPU时间 是否在内存 是否在磁盘
MEMORY_ONLY
MEMORY_ONLY_SER
MEMORY_AND_DISK 中等 部分 部分
MEMORY_AND_DISK_SER 部分 部分
DISK_ONLY

 

你可能感兴趣的:(Spark)