Spark Tungsten in-heap / off-heap 内存管理机制
前言
in-heap 和 off-heap (MemoryAllocator)
off-heap => org.apache.spark.unsafe.memory.UnsafeMemoryAllocator in-heap => org.apache.spark.unsafe.memory.HeapMemoryAllocator
long address = Platform.allocateMemory(size);
long[] array = new long[(int) (size / 8)];
org.apache.spark.unsafe.memory.MemoryBlock
pageNumber
内存管理器(MemoryManager)
org.apache.spark.unsafe.memory.ExecutorMemoryManager org.apache.spark.unsafe.memory.TaskMemoryManager
ExecutorMemoryManager
spark.unsafe.offHeap=true
MemoryBlock allocate(long size) void free(MemoryBlock memory)
TaskMemeoryManager
[13-bit page num][54-bit offset]
- 申请到空闲的Page number号
- 进行实际的内存分配,得到一个MemoryBlock
- 将Page number 赋给MemoryBlock
[13-bit page num][54-bit offset]
final long recordAddress = taskMemoryManager.encodePageNumberAndOffset(dataPage, dataPagePosition); //dataPageBaseObject 其实就是数组对象的地址,然后以他为基准, 在dataPagePosition 处写入一个int类型数据,这个就是内容的长度。实际的内容就会放到这个位置之后 Platform.putInt(dataPageBaseObject, dataPagePosition, lengthInBytes); //最后把数据要拷贝的实际的内存中,就需要多要4个字节了。所以这里要加回来 dataPagePosition += 4; Platform.copyMemory( recordBaseObject, recordBaseOffset, dataPageBaseObject, dataPagePosition, lengthInBytes);
offsetInPage -= page.getBaseOffset();
总结

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
hadoop 参数
看《Hadoop:权威指南》的时候收集了书上写的一些需要优化的参数,记录了一下子,给大家分享一下吧。 1.mapred.task.timeout 任务超时时间,默认是10分钟 2.mapred.map.max.attempts mapred.reduce.max.attempts 默认任务失败重复次数为4 3.mapred.max.map.failures.percent mapred.reduce.map.failures.percent 不触发错误的失败的最大百分比 4.mapred.jobtracker.taskScheduler 作业调度算法设置,默认是FIFO 5.io.sort.mb io.sort.spill.percent 缓冲区大小默认为100MB,以及缓冲区阀值默认为0.8,超过80%就保存到硬盘 6.io.sort.factor 默认为10,一次只能合并10个溢出文件 7.mapred.compress.map.output 默认为false,不压缩输出文件 压缩算法由mapred.map.output.compression.codec指定 8.tracker....
- 下一篇
Hbase 学习(一) hbase配置文件同步
最近在狂啃hadoop的书籍,这部《hbase:权威指南》就进入我的视野里面了,啃吧,因为是英文的书籍,有些个人理解不对的地方,欢迎各位拍砖。 HDFS和Hbase配置同步 hbase的配置中有一些和hdfs关联的配置,当hdfs中修改了,但是hbase中修改了,hbase中是不会知道的,比如dfs.replication,有时候我们想增加备份的数量,在hdfs中设置为5了,但是hbase中默认为3,这样hbase还是只保存3份。 那么有什么方法可以使他们的配置文件同步,有三种方法: (1)在hbase-env.sh的HBASE_CLASSPATH环境变量增加HADOOP_CONF_DIR。 (2)在${HBASE_HOME}/conf下放一份hadoop的配置文件hdfs-site.xml (or hadoop-site.xml)。 (3)直接在hbase-site.xml中添加。 从上述三种方法当中,目测是第一种方法比较靠谱,当然要同步配置文件还有别的方法,后续再进行介绍。 Hbase配置文件同步的脚本 以下这两个脚本都可以实现集群的hbase配置文件同步,第二个还带有删除之前配置...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS关闭SELinux安全模块
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker安装Oracle12C,快速搭建Oracle学习环境