Spark的性能优化之路

spark的parallelize()方法,可以指定分区数量。在coding阶段,对此没有引起重视,只是随意填了一个很大的数,认为分区当然是越多越好。但是到了性能测试阶段,发现并不是。 1.分区数太多意味着任务数太多,每次调度任务也是很耗时的,所以分区数太多会导致总体耗时增多。 2.分区数太少的话,会导致一些结点没有分配到任务;另一方面,分区数少则每个分区要处理的数据量就会增大,从而对每个结点的内存要求就会提高;还有分区数不合理,会导致数据倾斜问题。 3.对一个RDD数据集,处理的分区数尽量和集群节点数对应,一般是集群节点的2-3倍。(可以在配置文件中加入node-size,和partition-number)。 当然,到了这一步,感觉自己的设置真的很合理了。但是代码运行就发现掉进了一个大坑。有的task对这种分区方式并不适用。 例如:List<String> types = .... 节点数有8个,按分区数是节点数2倍计算,分区数为16;如果types.size小于16,就会浪费计算资源。有的分区就没有分配到数据集。 所以要进一步对分区进行控制和优化。即分数和和数据集的size数,取最小值,作为最终分区数。

转载于:https://my.oschina.net/u/3957231/blog/3051445

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值