Spark tungsten shuffle
2016-07-18 22:03
232 查看
Tungsten的内存管理机制
与Sort shuffle相比,Tungsten采用独特的内存模型来存储数据,而Sort shuffle采用Java的数据结构AppendOnlyMap来存储数据,并且存储的数据是序列化的。这种独特的内存模型叫做page。序列化后的数据放在page中,当page满后,spill到磁盘文件,然后从新allocate一个新的page(如果spark.unsafe.offHeap=true,会从off-heap分配内存,否则,从in-heap分配内存)。最后将page里数据和spilled磁盘文件merge到一个文件里。注意merge的时候不需要反序列化(sort
shuffle需要)。
为了数据record在page中寻址,定义了PackedRecordPointer对象用一个64bit的long型变量来记录如下信息:
[24 bit partition number][13 bit memory page number][27 bit offset in page]。
注意这些信息是用来将数据按照partition进行排序。从这些信息中,我们得到如下的约束。
1. 一个是partition 的数量(Reducer的数目)最多为2^24=16777216。
2. 单条记录不能大于 2^27=128 MB,加上page数目限制,一个task 能管理到的内存最多是 2^13 * 128M 也就是1TB左右。
与Sort shuffle相比,Tungsten采用独特的内存模型来存储数据,而Sort shuffle采用Java的数据结构AppendOnlyMap来存储数据,并且存储的数据是序列化的。这种独特的内存模型叫做page。序列化后的数据放在page中,当page满后,spill到磁盘文件,然后从新allocate一个新的page(如果spark.unsafe.offHeap=true,会从off-heap分配内存,否则,从in-heap分配内存)。最后将page里数据和spilled磁盘文件merge到一个文件里。注意merge的时候不需要反序列化(sort
shuffle需要)。
为了数据record在page中寻址,定义了PackedRecordPointer对象用一个64bit的long型变量来记录如下信息:
[24 bit partition number][13 bit memory page number][27 bit offset in page]。
注意这些信息是用来将数据按照partition进行排序。从这些信息中,我们得到如下的约束。
1. 一个是partition 的数量(Reducer的数目)最多为2^24=16777216。
2. 单条记录不能大于 2^27=128 MB,加上page数目限制,一个task 能管理到的内存最多是 2^13 * 128M 也就是1TB左右。
相关文章推荐
- HTML代码教程
- 死锁产生的必要条件,如何有效地避免死锁
- 为什么无穷大总是0x3f3f3f3f?
- TOJ 1455.Ultra-QuickSort(分治经典题目)
- POJ 2828 Buy Tickets
- 快速修复网页在IE8 下的显示兼容问题
- POJ3267 -- The Cow Lexicon( 字符匹配dp动态规划 )
- u-boot编译
- css 新颖的表单边框
- Struts2中EL表达式取值
- 5.oracle建表的时候同时创建主键,外键,注释,约束,索引
- 国际化
- faster rcnn源码解读总结
- 视频---码率、帧率、清晰度、分辨率、流畅度的关系与设置
- 【经验分享】如何将LPCXpresso的仿真器烧录成CMSIS-DAP或JLINK?
- 数位DP——不用62和4 ( HDU 2089 )
- 存在*.lastUpdated文件也能更新jar文件的方法
- 我的博客学习第一步
- 组合模式
- Chapter8~条件和循环