Spark之shuffle性能优化

一  开启consolidation机制

    spark.shuffle.consolidateFiles,这个参数默认为false,设置为true后,shuffle的性能将得到极大的提升。在没有开启开启consolidation机制的时候,shuffle write的性能是比较低下的,而且会直接影响shuffle read的性能。因为在shuffle map端创建的文件太多了,导致shuffle write需要花费大量的性能在文件的创建上。同样,shuffle read需要拉取大量文件的数据。开启了consolidation机制后,将会极大降低文件的数量,在此模式下,只有同时并行的task,会写不同的文件,下一批task会继续上一批的task创建的文件继续写。这样 shuffle read的时候,每个reduce端只需要取并行量个文件。

二  拉取缓冲

    spark.reducer.maxSizeInFlight,这个参数表示reduce task的拉取缓存,默认48M。如果内存比较充足的话,
调大这个参数可以减少拉取的次数。

三 写入缓存

    spark.shuffle.file.buffer:map task写文件到磁盘的缓存,默认32K,适当提高可以减少flush的次数。

四  拉取失败机制

    spark.shuffle.io.maxRetries:拉取失败重试次数,默认是3次。spark.shuffle.io.retryWait:拉取失败的重试间隔 默认为5s。reduce task拉取数据的时候,可能会遇到map task那里的excutor正在发生full gc ,那么此时的工程线程 是停止的。就会出现等待一段时间重新拉取。如果gc没有调优好,每次full gc都花费超出3*5秒的话,就会
频繁导致很多文件拉取失败,报错:shuffle out put file lost。此时,DAGScheduler 就会重试task和stage。
花费大量时间重新计算rdd。所以这个参数可以根据情况适当调大。

五  内存比例

    spark.shuffle.memoryFraction:用于reduce端聚合的内存比例,默认为0.2。内存中的数据超过这个大小就会
落到磁盘上。

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值