一 基本概念
简单来说数据倾斜就是数据的key 的分化严重不均,造成一部分数据很多,一部分数据很少。默认情况下, Map 阶段同一 Key 数据分发给一个 reduce,当一个 key 数据过大时,就发生倾斜了
数据倾斜一般有两种情况:
变量值很少: 单个变量值的占比极大,常见的字段如性别、学历、年龄等
变量值很多: 单个变量值的占比极小,常见的字段如收入、订单金额之类的
其在reduce的表现有二:① 任务进度长时间维持在99%,只有少量reduce子任务未完成。这是因为其处理的数据量和其他reduce差异过大;② 单一reduce的时长与平均时长差异过大
二 造成数据倾斜的常见操作
关键词 |
情形 |
后果 |
Join |
其中一个表较小, 但是key集中 |
分发到某一个或几个Reduce上的数据远高于平均值 |
大表与大表& |