2019独角兽企业重金招聘Python工程师标准>>>
一:
为什么需要Sort-Based Shuffle?1.Shuffle一般包含两个阶段:第一部分,产生Shuffle的阶段(也叫Map阶段),第二阶段,使用Shuffle数据的阶段(也叫Reduce阶段)2.Spark的Job会被划分成很多Stage,如果只有一个Stage则这个Job就只有一个Mapper,当然不会产生Shuffle,适合ETL。如果不止一个Stage,最后一个Stage就是最终的Reduce,最左侧的Stage就仅仅是整个Job的Mapper,中间所有的任意一个Stage是其父Stage的Reducer,其子Stage的Mapper3.Spark Shuffle在最开始的时候只支持Hash-base Shuffle:默认Mapper阶段会为Reducer阶段的每一个Task单独创建一个文件来保存该Task中要使用的数据,但是在一些情况下(例如数据量非常大的情况)会造成数据文件(M*R M:Mapper端的并行任务数,R:Reducer端的并行任务数)的随机磁盘I/O操作,且会形成大量的Memory消耗(极易造成OOM),后来改善方式是加入了Shuffle Consolidate机制来将Shuffle时候产生文件的数量减少到C*R个(C:Mapper端同时能够使用Cores的数量,R:Reducer端的并行任务数)。如果此时Reducer端的并行任务数过多,依旧没有逃脱文件过多的命运