spark shuffle 过程分析:
一普通机制:
1,首先 reduceBykey 是会将每一个 key 对应的所有value聚合成一个value,然后生成一个rdd,元素类型是<k,v>形式,然后每一个k对应一个聚合起来的v
2,每一个k对应的v 不一定在一个节点之上,也不可能是在一个 partition中
3,聚合过程:
1),Shuffle Write 上一个map task 必须保证将自己处理的当前分区的数据相同的key写入到一个分区文件之中(有可能多个)
2),Shuddle Read:reduce task会从上一个stage所有的task所在的机器上去找属于自己的分区文件,这样保证每一个key所对应的value都汇聚到同一个节点(一般提交的节点)去处理
4,针对Shuffle 过程所产生的问题:
1,由于产生的小文件太多,造成 shuffle write写入次数过多,shuffle Read网络操作太过于频繁
2,可能导致内存不足,节点之间如果网络不稳定可能到最后网络阻塞,导致reduce重新连接
二,使用buffle缓冲区机制(哈希shuffle的优化)
1,增加了缓冲区,缓冲区的buffle个数是 reduce task个数,也就是每一个task产生的buffle都被进行共用
三,使用 SortShuffleManage机制
1,普通机制:比上一次又一次减少了生成文件的个数
2,SortShuffleManage bypass机制
1),针对不适用排序的业务场景,可以调整 bypassMergeThreshold数量达到使用这种机制的目的