在join的过程中,关联键出现一对多,或者多对多时候,造出结果存在重复。
数据发散症状 症状(1)结果存在重复。
(2)数据量剧增。
(3)可能导致无法使用正常资源处理完成。
排查(1)出现这种原因就是
A left join B 的时候,使用主键的关联条件中,没有关联到表B的最小粒度。
(2)查找是否是这种原因
select 关联字段 from table group by 关联字段 having count(关联字段)>1 就可以判定是否有关联字段出现不唯一的发散情况。
避免或解决(1)如果右表关联字段有重复值则要去重,否则数据会发散。
(2)仔细写好SQL,是否存在业务逻辑的错误(关联字段用错)。
笛卡儿积 什么是笛卡儿积笛卡尔积在SQL中的实现方式既是交叉连接(Cross Join)。所有连接方式都会先生成临时笛卡尔积表,笛卡尔积是关系代数里的一个概念,表示两个表中的每一行数据任意组合 。
笛卡儿积案例 A表 id name city 1 aa 1001 2 bb 1002 3 cc 1003 B表 id city_name 1 a城 2 b城 3 c城 SQLSELECT * FROM A,B;结果 id name city id city_name 1 aa 1001 1 a城 1 aa 1001 2 bb 1 aa 1001 3 c城 2 bb 1002 1 a城 2 bb 1002 2 bb 2 bb 1002 3 c城 3 cc 1003 1 a城 3 cc 1003 2 bb 3 cc 1003 3 c城 产生原因
(1)当连接没有on条件是,会出现笛卡尔积(全部笛卡尔积)。
(2)当连接on条件是非唯一字段时,会出现笛卡尔积(局部笛卡尔积)。
(3)join的两个表中都含有空值。
怎么避免或解决(1)关联范围在最小粒度的列.
(2)检查表的关联字段是否有空值。BOB半岛入口
数据倾斜 什么是数据倾斜数据倾斜最笼统概念就是数据的分布不平衡,有些地方数据多,有些地方数据少。在计算过程中有些地方数据早早地处理完了,有些地方数据迟迟没有处理完成,造成整个处理流程迟迟没有结束,这就是最直接数据倾斜的表现。
数据倾斜症状 Hivehive自身的MR引擎:发现所有的map task全部完成,并且99%的reduce task完成,只剩下一个或者少数几个reduce task一直在执行,这种情况下一般都是发生了数据倾斜。说白了就是Hive的数据倾斜本质上是MapReduce的数据倾斜。
Flink(1)Flink 任务出现数据倾斜的直观表现是任务节点频繁出现反压BOB半岛官方。
(2)部分节点出现 OOM异常,是因为大量的数据集中在某个节点上,导致该节点内存被爆,任务失败重启。
(1)Executor lost,OOM,Shuffle过程出错。
(2)Driver OOM。
(3)单个Executor执行时间特别久,整体任务卡在某个阶段不能结束。
(4)正常运行的任务突然失败。
怎么避免或解决不管再出现分布式计算框架出现数据倾斜问题解决思路如下:很多数据倾斜的问题,都可以用和平台无关的方式解决,比如更好的数据预处理,异常值的过滤等。因此,解决数据倾斜的重点在于对数据设计和业务的理解,这两个搞清楚了,数据倾斜就解决了大部分了。关注这几个方面:
业务逻辑方面(1)数据预处理。
(2)解决热点数据:分而治之(第一次打散计算,第二次再最终聚合计算)。
程序代码层面(1)导致最终只有一个Reduce任务的,需要想到用替代的关键字或者算子去提升Reduce任务数。
(2)调参。
熟悉自己手中的工具(框架)优秀的框架已经负重前行给你优化了好多不仅要学,更学会去用,更要努力去完善拓展框架功能BOB半岛下载。