第27课:彻底解密Spark Shuffle令人费解的6大经典问题(课程内容全球独家)
Shuffle的第一大问题:什么时候进行shuffle的fetch操作?Shuffle具体在什么时候开始运行(是在一边Mapper的map操作同时进行
reduce端的shuffle的reduce操作吗)?
错误的观点:Spark是一遍Mapper一遍Shuffle,而Hadoop的MapReduce是先完成Mapper然后才进行Reducer的shuffle。
事实是:Spark一定是先完成Mapper端所有的Tasks,才会进行Reducer端的shuffle过程。
原因:Spark的job是按照stage线性执行的,前面的stage必须执行完才能够执行后面的Reducer的shuffle过程。
补充说明:Spark的shuffle是边拉取数据边进行Aggregate操作的。其实与Hadoop MapReduce相比起优势确实在速度上。但是也会导致一
些算法不好实现,例如求平均值等。(但是spark提供了一些内置函数)
Shuffle的第二大问题:shuffle fetch过来的数据到底放到了哪里?
抓过来的数据首先肯定是放在reducer端的内存缓冲区中的,spark曾经有版本要求只能放在内存缓存中,数据结构类似于HashMap
(AppendOnlyMap),显然特别消耗内存和极易出现OOM,同时也从reducer端极大的限制了spark集群的规模,现在的实现都是内存+磁盘
的方式(数据结构使用ExternalAppendOnlyMap),当然大家也可以通过spark.shuffle.spill=false来

本课程详细探讨Spark Shuffle的六个核心问题,包括fetch操作何时启动、数据存储位置、数据存储与定位、HashShuffle中间文件数量、Sorted-Based Shuffle的排序特性以及Tungsten-Sorted Shuffle的工作原理。讲解了Spark与Hadoop MapReduce在Shuffle过程中的差异,并深入分析了内存与磁盘的使用策略、Consolidation机制以及不同Shuffle方式的适用场景。
订阅专栏 解锁全文
1295

被折叠的 条评论
为什么被折叠?



