spark 调优(一):从 hql 转向代码
大家好,我是怀瑾握瑜,一只大数据萌新,家有两只吞金兽,嘉与嘉,上能 code 下能 teach 的全能奶爸
如果您喜欢我的文章,可以[关注⭐]+[点赞👍]+[评论📃],您的三连是我前进的动力,期待与您共同成长~
1. 起因
日常大数据的处理,常见的数据输出就是最大最小值,求个和,求个平均数这种,常见的写法,写个 hql,先分个组,在加一个 max 或 sum 就可以
当然如果条件更复杂一些,比如加一个 if 判断,就是 sql 稍微长一些,但还是能写出来
本地测试,还 OK,测试环境,勉强能行,感觉不错,无非就是怼资源的问题
但放到上产上,直接傻眼
我可是用 1.5T 的内存,200 个并发,内存经常溢出,超时,GC 时间巨长
2.优化开始
sql 有问题,首先肯定第一反应就是优化资源分配和使用
有很多任务心跳超时
任务序列化时间过长
发现 GC 时间过长,优化 jvm 参数
发现 spark 有任务合并,在特殊位置增加 reparation,强制任务分隔
经过一系列优化发现有效果,但收效甚微,最后一步执行还是要以小时计算
仔细分析了一下 sql,是不是 spark 底层对多次的 max,min 这种,在数据量大的时候需要多次遍历数据
3. 问题解决
最后的决定,用代码写,再试一次
激动的心颤抖的手,任务执行,下班走人,生死有命富贵在天,执行结果,大宝明天见
当然最终结果 1 个半小时结束,效率还可以接受而且这样内存比较受控,可以更高的增加 executor 等通过合理资源去提高并行度
4 总结
对于 hql 相对复杂的一些操作,尤其是对原始数据,一定要考虑数据量的问题,数据量大到一定程度,不是怼资源可以过去的了,而且这样优化的空间也会变得很少
结束语
如果您喜欢我的文章,可以[关注⭐]+[点赞👍]+[评论📃],您的三连是我前进的动力,期待与您共同成长~
可关注公众号【怀瑾握瑜的嘉与嘉】,获取资源下载方式
版权声明: 本文为 InfoQ 作者【怀瑾握瑜的嘉与嘉】的原创文章。
原文链接:【http://xie.infoq.cn/article/178e89bb1ced560de54e3916b】。文章转载请联系作者。
评论