Spark2.x 内存管理之---OFF_HEAP

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载!!

欢迎访问:https://blog.csdn.net/qq_21439395/article/details/80773121

交流QQ: 824203453

 

1.  Spark 内存管理之—OFF_HEAP

1.1.  存储级别简介

Spark中RDD提供了多种存储级别,除去使用内存,磁盘等,还有一种是OFF_HEAP,称之为 使用JVM堆外内存。


使用OFF_HEAP的优势在于,在内存有限时,可以减少频繁GC及不必要的内存消耗,提升程序性能。
在Spark1.x以前,默认的off_heap使用的是Tachyon。但是Spark中默认操作Tachyon的TachyonBlockManager开发完成之后,代码就不再更新。当Tachyon升级为Alluxio之后移除不使用的API,导致Spark默认off_heap不可用(spark1.6+)。

错误情况可参考:https://alluxio.atlassian.net/browse/ALLUXIO-1881

1.2.  Spark2.0的off_heap

从spark2.0开始,移除默认的TachyonBlockManager以及ExternalBlockManager相关的API。

移除情况可参考:https://issues.apache.org/jira/browse/SPARK-12667

但是在Spark2.x的版本中,OFF_HEAP这一存储级别,依然存在:

那么,这里的OFF_HEAD 数据是如何存储的呢?

在org.apache.spark.memory中,有一个MemoryMode,MemoryMode标记了是使用ON_HEAP还是OFF_HEAP。

在org.apache.spark.storage.memory.MemoryStore中,根据MemoryMode类型来调用不同的存储。

在MemoryStore中putIteratorAsBytes方法,是用于存储数据的方法。

在该方法中,OFF_HEAP使用的是Platform 来做底层存储的。

Platform是利用java unsafe API实现的一个访问off_heap的类。

 

所以,spark2.x的OFF_HEAP就是利用java unsafe API实现的内存管理。

优点:减少频繁的GC,减少内存的使用,提高程序性能。

缺点:没有数据备份,也不能像alluxio那样保证数据高可用,丢失数据则需要重新计算。

 

关于 java  unsafe API 可参考:

JavaUnsafe类详解 https://www.cnblogs.com/mickole/articles/3757278.html 

JAVA并发编程学习笔记之Unsafe类  https://blog.csdn.net/aesop_wubo/article/details/7537278  

 

版权声明:本文为博主原创文章,未经博主允许不得转载!!

欢迎访问:https://blog.csdn.net/qq_21439395/article/details/80773121

交流QQ: 824203453

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值