Spark Shuffle剖析

来源:互联网 发布:单级放大电路实验数据 编辑:程序博客网 时间:2024/05/22 03:16

Spark核心计算——shuffle
指定两个task数量。
分为两部分shuffle write 和 shuffle read
这里写图片描述

Spark核心计算——shuffle write(hash-based)(逐渐被淘汰基于hash实现的shuffle)
一个executor中的两个task,多线程。
小文件有大量随机读,占用大量IO。map-task写到bucket的过程中,先写入buffer然后溢写到磁盘。
这里写图片描述

—Total shuffle file number
1.M*R
2.1million files,if 1k mapper and 1k reducer

—Write buffer size(core==task)
写缓存就要占用大量内存,扩展性非常差。
1.Core * R * 32k
2.256MB,if 8 cores and 1000 reducer

这里写图片描述

—Total shuffle file number(improved)(写缓存还是一样)
1.Core * R

—Write buffer size(same)
2.Core * R * 32k

Spark核心计算——shuffle write(sort-based)(借鉴mapreduce,几乎一模一样)
maptask只产生一个文件。产生的文件写到executor所在的节点的磁盘,通过http拉取。比基于hash的扩展性好很多!
这里写图片描述

Spark核心计算——shuffle read
基于hash和基于sort的shuffle实现在shuffle read阶段都是一样的。
这里写图片描述

Spark核心计算——shuffle read (以hash-based为例)
这里写图片描述

Spark核心计算——aggregate (以hash-based为例)
这里写图片描述

这里写图片描述

这里写图片描述
hash map实现是基于内存的
这里写图片描述

Spark核心计算——aggregate

Memory not enough?

这里写图片描述

这里写图片描述

Spark核心计算——groupBy
shuffle map端不会有归约,直接把key相同的传到reduce端,把value放到一起。
这里写图片描述

Spark核心计算——shuffle比较
spark shuffle最终写磁盘(中间会写内存一般是32k)spark不是全内存的。还有全内存的计算框架。
这里写图片描述

0 0