文章目录
一、前言
二、长尾的原因
三、优化思路与解决方案
3.1 Group By 长尾
3.2 count distinct 长尾
3.3 动态分区 长尾
3.4 Join 长尾
一、前言
长尾问题是分布式计算里最常见的问题之一,也是典型的疑难杂症。究其原因,是因为数据分布不均,导致各个节点的工作量不同,整个任务就需要等最慢的节点完成才能完成。处理这类问题的思路就是把工作分给多个Worker去执行,而不是一个Worker单独抗下最重的那份工作。
如何查看是否发生了长尾?发生在什么阶段?
Maxcompute 任务 = 1 … N Fuxi Job
Fuxi Job = 1 … N Fuxi Task
Fuxi Task = 1 … N Fuxi Instance
如果看到Long-Tails,就说明发生了长尾。
二、长尾的原因
原因:某些 instance(可能是map, 也可能是reduce) 处理的数据量远远超过其他 instance 处理的数据量,这些instance的运行时长远远超过其他instance的平均运行时长,导致整个任务运行时间超长,造成任务延迟。
举例:
select key, count(*) as cnt from table group by key;