分享

spark调优经验

pig2 2014-11-2 21:46:45 发表于 总结型 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 4 14766

作为个人经验总结:
比如
RDD 缓存分布不均匀 是影响spark 的很大的性能之一,为什么这么说?






spark调优是需要根据业务需要调整的,并不是说某个设置是一成不变的,就比如机器学习一样,是在不断的调试中找出当前业务下更优的调优配置。下面零碎的总结了一些我的调优笔记。

spark 存储的时候存在严重的分配不均的现象,有几台机器在过渡使用, 有几台机器却很少被使用,有几台机器缓存了几十个上百个RDD blocks  有的机器一个RDD blocks 都没有,这样存储有RDD blocks 的可以进行运算,运算的tasks 最多为该机器core数。

spark.storage.memoryFraction 分配给用于缓存RDD的内存的比例  

比如如果
spark.executor.memory              30g  
spark.storage.memoryFraction       0.5         
则用于缓存的内存为14G 多, 默认留一些做其他用。



每一个RDD blocks  的大小不一定是64兆 可能小于64兆,另外如果driver不是子节点,driver 程序运行的节点上的用于缓存的内存 ,就不会被使用。


事实上一个两三G 的数据 需要用的缓存也至少需要两三G,如果中间过程中还有产生RDD 且也需要缓存到内存,则需要分配更多的内存用于缓存。在缓存足够多的情况的更多的内存不足错误提示(OOM) 来源于计算的时候产生的一些中间对象即计算所需要的内存。


所以分配用于缓存的内存 应该是这么算的, 比如我有10G的文件,4台机器,则每台机器至少2.5g缓存,如果每台机器分配给excutor 的内存为10g ,则memoryFraction 则至少为0.25  最好配大一些,但不能太大, 太大会导致计算内存不够。而且如果中间过程还有产生新的RDD,则需要根据实际情况调大memoryFraction。


RDD 缓存分布不均匀 是影响spark 的很大的性能之一,为什么这么说?

因为有的机器分配给用于RDD 缓存的内存都用完了  ,这样相对而言在这个机器上计算的开销也会大,有的机器缓存占用的内存很少,就算用这个机器来计算,还需要启动Node_local 模式,这样会影响计算的时间。



调优过程也遇到了一些问题,还没解决,比如:
为什么一个2G 的数据,默认块大小为64M. default.parallelism 设置成100,可它总是不按这个数据来分,比如经常分成了108个blocks,影响partions个数的参数还有哪些?还有我明明有四个节点,但经常有节点被分配的RDD 和计算都很少很少,这种资源浪费的情况应该怎么调解?






已有(4)人评论

跳转到指定楼层
闵开慧 发表于 2014-11-4 17:35:16
不错学习一下
回复

使用道具 举报

xwc3504 发表于 2014-11-10 16:18:13
一直关注博主的学习动态!!!
回复

使用道具 举报

crazyfish1986 发表于 2014-12-6 22:42:02
牛b啊,正在学习spark,向楼主学习
回复

使用道具 举报

EASONLIU 发表于 2014-12-30 20:25:03
先拜读一下,过段时间应该会有用到
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条