Spark shuffle详细过程
有许多场景下,我们需要进行跨服务器的数据整合,比如两个表之间,通过Id进行join操作,你必须确保所有具有相同id的数据整合到相同的块文件中。那么我们先说一下mapreduce的shuffle过程。 Mapreduce的shuffle的计算过程是在executor中划分mapper与reducer。Spark的Shuffling中有两个重要的压缩参数。 spark.shuffle.compress true ---是否 将会将shuffle中outputs的过程进行压缩 。将 spark.io.compression.codec编码器 设置为压缩数据,默认是 true .同时,通过spark.shuffle.manager 来设置shuffle时的排序算法,有 hash,sort,tungsten-sort 。(用hash会快一点,我不需要排序啊~) Hash Shuffle 使用hash散列有很多缺点,主要是因为每个Map task都会为每个reduce生成一份文件,所以最后就会 有M * R个文件数量 。那么如果在比较多的Map和Reduce的情况下就会出问题,输出缓冲区的大小,系统中打开文件的数量,创建和删除所有这些文件的速度都会受到影响。如下图: 这里有一个优化的参数 spark.shuffle.consolidateFiles ,默认为false, 当设置成true时