一、数据倾斜

### --- 基本概念

~~~ 这是我们期望的处理模式:

|NO.Z.00108|——————————|BigDataEnd|—_数据倾斜

### --- 什么是数据倾斜

~~~ Task之间数据分配的非常不均匀
~~~ key.hashCode % reduce个数 = 分区号

|NO.Z.00108|——————————|BigDataEnd|—_数据_02

### --- 数据倾斜有哪些现象

~~~ Executor lost、OOM、Shuffle过程出错、程序执行慢
~~~ 单个Executor执行时间特别久,整体任务卡在某个阶段不能结束
~~~ 正常运行的任务突然失败大多数 Task 运行正常,个别Task运行缓慢或发生OOM
### --- 数据倾斜造成的危害有哪些

~~~ 个别任务耗时远高于其它任务,轻则造成系统资源的浪费,
~~~ 使整体应用耗时过大,不能充分发挥分布式系统并行计算的优势
~~~ 个别Task发生OOM,导致整体作业运行失败
### --- 为什么会发生数据倾斜

~~~ 数据异常
~~~ 参与计算的 key 有大量空值(null),这些空值被分配到同一分区
### --- Map Task数据倾斜,主要是数据源导致的数据倾斜:

~~~ 数据文件压缩格式(压缩格式不可切分)
~~~ Kafka数据分区不均匀
### --- Reduce task数据倾斜(重灾区,最常见):

~~~ Shuffle (外因)。Shuffle操作涉及到大量的磁盘、网络IO,对作业性能影响极大
~~~ Key分布不均 (内因)
### --- 如何定位发生数据倾斜

~~~ 凭借经验或Web UI,找到对应的Stage;再找到对应的 Shuffle 算子











Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart

                                                                                                                                                   ——W.S.Landor