您的位置:首页 > 其它

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: