在了解Spark-Shuffle原理之后,我们看下实际生产环境中,减少Map端输出写入文件数量的优化效果,不了解的可以考古
Spark-Shuffle原理
实践:
实际生产环境的条件:
100个节点(每个节点一个executor):100个executor
每个executor:2个cpu core
总共1000个task:每个executor平均10个task
下个stage阶段也是1000个task
每个节点(10个task)
每个节点会输出map端文件=10(Task数量) * 1000(下一个阶段的Task数量)=1万个文件
注:每个task都会生成下一个阶段task数量的文件
总共有多少份map端输出文件?100 * 10000 = 100万。
优化参数
new SparkConf().set("spark.shuffle.consolidateFiles", "true")
注:每个task都会生成下一个阶段task数量的文件
优化后结果:
100个节点(每个节点一个executor):100个executor
每个executor:2个cpu core
总共1000个task:每个executor平均10个task
下个stage阶段也是1000个task
每个节点(10个task)
每个节点会输出map端文件=2(cpu数量=生成文件数量,第二批的task会复用生成的文件) * 1000(下一个阶段的Task数量)=2000个文件
总共有多少份map端输出文件?100(节点数) * 2000(每个节点任务数) = 20万
注:以上参数仅适用于Spark1.2之前,因为该版本之后,默认shuffleManager为sortshuffleManager,会以cpuCore为单位,自动合并map端文件