写在前面
在任何大数据类的项目中,数据倾斜都是最棘手的性能问题,最能体现人的技术能力,最能体现RD(Research Developer,研发工程师)的技术水平。数据倾斜 = 性能杀手,如果没有丰富的经验,或者没有受过专业的技术培训,是很难解决数据倾斜问题的。 所以,数据倾斜解决方案,在整个项目中,都是非常非常核心、有含金量、有价值的。
数据倾斜产生后的现象:
spark数据倾斜,有两种表现: 第一种,你的大部分的task,都执行的特别特别快,刷刷刷,就执行完了;剩下几个task,执行的特别特别慢,前面的task,一般1s可以执行完5个;最后发现1000个task,998,999 task,要执行1-2个小时才能执行完一个task。出现这种数据倾斜还算好的,因为虽然老牛拉破车一样,非常慢,但是至少还能跑。 第二种,运行的时候,其他task都刷刷刷执行完了,也没什么特别的问题;但是有的task,就是会突然间,啪,报了一个OOM,JVM Out Of Memory,内存溢出了,task failed,task lost,resubmitting task。反复执行几次都到了某个task就是跑不通,最后就挂掉。某个task就直接OOM,那么基本上也是因为数据倾斜了,task分配的数量实在是太大了!!!所以内存放不下,然后你的