七、Spark性能调优——Shuffle 调优

目录

 

一、调节 map 端缓冲区大小

二、调节 reduce 端拉取数据缓冲区大小

三、调节 reduce 端拉取数据重试次数

四、调节 reduce 端拉取数据等待间隔

五、调节 SortShuffle 排序操作阈值


一、调节 map 端缓冲区大小

val conf = new SparkConf()
.set("spark.shuffle.file.buffer", "64")

在 Spark 任务运行过程中,如果 shuffle 的 map 端处理的数据量比较大, 但是map 端缓冲的大小是固定的,可能会出现 map 端缓冲数据频繁 spill 溢写到磁盘文件中的情况, 使得性能非常低下, 通过调节 map 端缓冲的大小,可以避免频繁的磁盘IO 操作,进而提升 Spark 任务的整体性能。

map 端缓冲的默认配置是 32KB, 如果每个 task 处理 640KB 的数据,那么会发生 640/32 = 20 次溢写,如果每个 task 处理 64000KB 的数据,机会发生 64000/32=2000此溢写,这对于性能的影响是非常严重的

二、调节 reduce 端拉取数据缓冲区大小

val conf = new SparkConf()
.set("spark.reducer.maxSizeInFlight", "96")

Spark Shuffle 过程中, shuffle reduce task 的 buffer 缓冲区大小决定了 reduce task每次能够缓冲的数据量, 也就是每次能够拉取的数据量, 如果内存资源较为充足,适当增加拉取数据缓冲区的大小,可以减少拉取数据的次数,也就可以减少网络传输的次数,进而提升性能。

三、调节 reduce 端拉取数据重试次数

val conf = new SparkConf()
.set("spark.shuffle.io.maxRetries", "60")

Spark Shuffle 过程中, reduce task 拉取属于自己的数据时,如果因为网络异常等原因导致失败会自动进行重试对于那些包含了特别耗时的 shuffle 操作的作业,建议增加重试最大次数(比如 60 次),以避免由于 JVM 的 full gc 或者网络不稳定等因素导致的数据拉取失败。在实践中发现,对于针对超大数据量(数十亿~上百亿)的 shuffle 过程,调节该参数可以大幅度提升稳定性。

四、调节 reduce 端拉取数据等待间隔

val conf = new SparkConf()
.set("spark.shuffle.io.retryWait", "60s")

Spark Shuffle 过程中, reduce task 拉取属于自己的数据时,如果因为网络异常等原因导致失败会自动进行重试,在一次失败后,会等待一定的时间间隔再进行重试,可以通过加大间隔时长(比如 60s),以增加 shuffle 操作的稳定性。
 

五、调节 SortShuffle 排序操作阈值

Spark 1.6之后使用就是 SortShuffle

val conf = new SparkConf()
.set("spark.shuffle.sort.bypassMergeThreshold", "400")

对于 SortShuffleManager, 如果 shuffle reduce task 的数量小于某一阈值则 shufflewrite 过程中不会进行排序操作,而是直接按照未经优化的 HashShuffleManager 的方式去写数据,但是最后会将每个 task 产生的所有临时磁盘文件都合并成一个文件,
并会创建单独的索引文件。

当你使用 SortShuffleManager 时,如果的确不需要排序操作,那么建议将这个参数调大一些,大于 shuffle read task 的数量, 那么此时 map-side 就不会进行排序了,减少了排序的性能开销, 但是这种方式下,依然会产生大量的磁盘文件,因此 shuffle write 性能有待提高。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值