Spark tungsten shuffle

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左右。

Memory Management



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值