首页 理论教育 比较不同StorageLevel的6.3方案

比较不同StorageLevel的6.3方案

时间:2023-06-29 理论教育 版权反馈
【摘要】:在本节中,将对比分析不同StorageLevel在性能方面的对比,以及StorageLevel存储级别的选择。首先看一下内存级别的存储,StorageLevel在内存存储上提供了4个选择,分别是MEMORY_ONLY、MEMORY_ONLY_2、MEMORY_ONLY_SER和MEMORY_ONLY_SER_2。StorageLevel中以DISK_ONLY代表选择磁盘存储,计算的数据将通过I/O操作存储到磁盘上,磁盘相对于内存,其优点是有相对充分的空间对数据进行存储,当然其缺点是访问速度慢。在StorageLevel中,内存和磁盘有4种不同的组合方式,分别是MEMORY_AND_DISK、MEMORY_AND_DISK_2、MEMORY_AND_DISK_SER和MEMORY_AND_DISK_SER。

比较不同StorageLevel的6.3方案

Spark Storage模块中设置了不同的存储级别,不同的存储级别在性能和容错性上各有优势。比如MemoryStore在访问速度上更快,但是由于数据都存放在JVM内存中,会占用大量的JVM Storage内存,严重情况下可能会出现OOM。DiskStore在访问速度上没有MemoryStore快,因为其需要读写磁盘,频繁的I/O操作会大大地降低系统性能,但是DiskStore能够存储的文件的大小比MemoryStore大得多。ExternalBlockStore采用JVM外部的存储系统,Exter-nalBlockStore的典型运用就是Tachyon内存分布式文件系统

在本节中,将对比分析不同StorageLevel在性能方面的对比,以及StorageLevel存储级别的选择。首先看一下内存级别的存储,StorageLevel在内存存储上提供了4个选择,分别是MEMORY_ONLY、MEMORY_ONLY_2、MEMORY_ONLY_SER和MEMORY_ONLY_SER_2。接下来分别对这4种存储级别进行对比。

MEMORY_ONLY,从名称上就可以知道,只启用内存存储并且在内存中只保留一份数据。这种模式最大的缺点是数据以对象的形式存储在内存中,当数据量过大时容易造成OOM;MEMORY_ONLY_2,这种存储级别将数据存放在内存中,并在远程结点上存储一份数据的副本,其优点是当本地结点数据被破坏时,远程结点还有一个冗余的备份,增加了抵抗风险的能力。缺点是数据仍然以对象形式存放在内存中,大量的对象容易导致OOM,并且在远程结点冗余备份,增加了网络开销;MEMORY_ONLY_SER,这种存储模式将数据序列化之后以字节数组形式存放在内存中,大大降低了内存的消耗,但是当数据量超出JVM分配的内存空间时,仍然会出现OOM;MEMORY_ONLY_SER_2,这种存储模式在序列化数据的同时,在远程结点冗余备份数据,增强了抵抗风险的能力,数据量过大也会出现OOM,并且冗余备份还增加了网络开销。

现在的集群,虽然内存都已经很大了,但是即便再大的内存,也不能保证一定不会出现OOM。万事都有利有弊,内存存储在速度上的确非常快,但跟磁盘比起来,其容量仍然有限,在期盼物理内存在将来越来越大的同时,也需要采取其他的补救措施。接下来看一下磁盘存储。(www.xing528.com)

StorageLevel中以DISK_ONLY代表选择磁盘存储,计算的数据将通过I/O操作存储到磁盘上,磁盘相对于内存,其优点是有相对充分的空间对数据进行存储,当然其缺点是访问速度慢。DISK_ONLY_2表示使用磁盘存储,并在远程结点上进行冗余备份,增加了抵抗风险的能力。纯的MEMORY和纯的DISK存储都有其优缺点,能不能取两者的长补两者的短呢?答案当然是可以,只需同时使用内存和磁盘存储即可,内存提供高速的访问速度,磁盘提供相对充分的存储空间。

在StorageLevel中,内存和磁盘有4种不同的组合方式,分别是MEMORY_AND_DISK、MEMORY_AND_DISK_2、MEMORY_AND_DISK_SER和MEMORY_AND_DISK_SER。MEMO-RY_AND_DISK这种存储方式表示,首先将数据放在内存,当内存不能放下该block数据时,将其溢出到磁盘中;MEMORY_AND_DISK_2表示在本地和远程结点上分别保存;MEMORY_AND_DISK_SER表示序列化存储到内存,当内存不足时,溢出到磁盘;MEMORY_AND_ DISK_SER_2在MEMORY_AND_DISK基础上增加了远程结点的冗余备份。

虽然磁盘和内存存储级别都可以单独提供存储服务,但其各有优缺点,磁盘和内存的配合使用克服了单独使用磁盘和内存存储的缺点。有没有第三方专门提供存储服务呢?肯定有,那就是OFF_HEAP,OFF_HEAP表示堆外存储,数据存储在JVM外边,其优点是让第三方服务专门管理数据,而JVM中只负责计算,将存储和计算模块分离,JVM中少了存储,这就减少了JVM进行GC的可能,JVM GC是相当费时的操作。Tachyon提供堆外存储服务,Spark中目前默认使用的堆外存储是Tachyon。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈