文章地址:http://www.haha174.top/article/details/251220
1 consolidation
new SparkConf().set(“spark.shuffle.consolidateFiles”,”true”)
是否开启shuffle block file 的合并 默认false
没有开启consolidation 机制的时候,shuffle write 的性能是比较低下的 因为在shuffle map 的时候创建的磁盘文件太多了,导致shuffle write 要耗费大量的性能在磁盘文件的创建,以及在磁盘io 上,对于shuffle read 也是一样,每个shuffle task 可能都需要通过磁盘io 读取多个文件的数据。都只shuffle read 性能 可能也受到影响,
但是其实最主要的还是shuffle write 因为要写的磁盘文件的数量实在是太多了。
比如每个节点有100个shuffle map task 然后呢 总共有 有1000个 result task .所以每个节点上的磁盘文件的数量就是100*1000
开启了consolidation机制之后shuffle map 写磁盘的数量大大减少, 每个shuffle map task 10个cpu 总共1000个result task 那么单个节点的文件总数 10*1000
此外 result task 拉去的磁盘io 也变少了
2 reduce task 缓存
spark.reducer.maxSizeInFlight 默认48M
每次只能拉取指定缓存大小的数据量,拉取完聚合处理,然后再次拉取,所以如果你的内存够大的化可以适当加大。
3.map 端的bucket 缓存
saprk.shuffle.file.buffer map task 写磁盘缓存 默认32 k
map 端的bucket 缓存也可以适当增大这样的化 写入磁盘的次数就会减少。
4.拉取失败最大重试次数
spark.shuffle.io.maxRetries 默认3次
5.拉取失败重试间隔
spark.shuffle.io.retryWait 默认5秒
6.用于reduce 端聚合的内存比例
spark.shuffle.memoryFraction
默认0.2 超过比例就会溢出到磁盘上