数据倾斜,看字面很简单,但实际还是不知道发生了什么情况。对于像我这样很多非技术类同学,想把技术原理弄懂,可能需要了解很多相关知识才能真正理解,这不太现实。所以,我们需要找到简单而又清晰的理解。相信理读完以下四点, 还是对数据倾斜有一个比较清晰的认知的。
数据倾斜的理解及优化
Q1 什么是数据倾斜?
数据倾斜是指,分布式计算时,一些节点计算量高于其他节点,速度很慢,导致其他节点计算完成后,还要等待这些节点完成。
Q2 数据倾斜有什么表现?
直观上可以看到map100%,reduce还卡在99%呢。
Q3 数据倾斜产生的原因是什么?
一般与业务逻辑和计算数据量有关。key分布的数据量不均匀,比如有的key有100万条数据,有的只有100条,处理100万条明显比处理10条数据的key慢。同时,整体任务的运行速度取决于最慢的那个。
Q4 数据倾斜发生时,如何优化?
a. 清除无效的倾斜数据,比如我们使用的表,需要聚合的字段有大量空值,而大部分分析场景下,是不需要空值的,这时,我们就可以将无效的数据剔除;
b. 强制拆解key,如果个别的key数据量过大,那么我们可以将key拆分成多组,聚合完成后,再按原本的key聚合,即可得到原来的需求数据。
当然了,如果CPU和资源足够,机器跑的动,key数据量大也没那么慢,这就是白天和晚上运行任务的差异。