你好,欢迎来到第 16 课时,这一课时我们主要讲解如何处理生产环境中的数据倾斜问题。
无论是对于 Flink、Spark 这样的实时计算框架还是 Hive 等离线计算框架,数据量从来都不是问题,真正引起问题导致严重后果的是数据倾斜。所谓数据倾斜,是指在大规模并行处理的数据中,其中某个运行节点处理的数据远远超过其他部分,这会导致该节点压力极大,最终出现运行失败从而导致整个任务的失败。
我们在这一课时中将分析出现数据倾斜的原因,Flink 任务中最容易出现数据倾斜的几个算子并且给出解决方案。
数据倾斜背景和危害
数据倾斜产生的原因和危害和解决方案有哪些呢?我们一一来看。
数据倾斜原理
目前我们所知道的大数据处理框架,比如 Flink、Spark、Hadoop 等之所以能处理高达千亿的数据,是因为这些框架都利用了分布式计算的思想,集群中多个计算节点并行,使得数据处理能力能得到线性扩展。
我们在第 03 课时“Flink 的编程模型与其他框架比较”中曾经讲过,在实际生产中 Flink 都是以集群的形式在运行,在运行的过程中包含了两类进程。其中 TaskManager 实际负责执行计算的 Worker,在其上执行 Flink Job 的一组 Task,Task 则是我们执行具体代码逻辑的容器。理论上只要我们的任务 Task 足够多就可以对足够大的数据量进