数据倾斜是指在 Spark 的 shuffle 过程中,由于某些 key 对应的 value 数据量过大,导致处理这些数据的 reduce 任务耗时过长,进而拖慢整个 Spark 作业的运行速度。

举例来说,假设有三个 key:hello、world 和 you。hello 对应 7 条数据,world 和 you 各对应 1 条数据。在 shuffle 过程中,这 7 条数据会被拉取到同一个 reduce 任务中进行处理,而另外两个任务只需要分别处理 1 条数据。

在这种情况下,处理 hello 数据的 reduce 任务运行时间可能是其他两个任务的 7 倍,而整个 stage 的运行速度取决于运行最慢的任务。数据倾斜会导致 Spark 作业运行缓慢,甚至可能因为某个任务数据量过大而发生内存溢出 (OOM)。