第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曾经有版本要求只能放在内存缓存中,数据结构类