1、shuffle分类
spark的shuffle机制可以分为3类,分别是HashShuffleManager、SortShuffleManager、tungsten-sortShuffleManager(钨丝ShuffleManager),下面对着几种shuffle机制进行详细的介绍
2、HashShuffleManager
普通的HashShuffleManager
HashShuffleManager 是早期的Spark版(1.2之前)本中的默认的shuffle的机制,但是这种shuffle机制有很明显的缺陷,下面是hashShuffleManager的原理图
下面图中是有两个executor, 每个executor中有一个cpu core,所以每个executor中的并行度是1,在进行shuffle的过程,,map端shuffle的数据回先写到bucket缓存中(32kb),当达到一定的大小时,会溢写到磁盘上,每个Map task会为每个reduce task产生一份数据,所以map端一共产生的小文件是就是 map task 数* reduce task数
假设一共有100个map task 和 100 个reduce task, 那么产生的小文件个数时10000个小文件,这么多小文件带来很多问题:
(1)写磁盘的小文件多,IO多
(2)reduce 端读取数据时建立的 连接多
(3)占用内存多,频繁gc,gc时会对外停止工作, 还可能导致oom内存