• 首页
  • 新闻中心
  • 支持与服务
  • 新闻中心

    你的位置:恒大化工 > 新闻中心 >

    数据开发中,这些让你头疼过吗?

    发布日期:2022-08-03 10:47    点击次数:140
    数据发散 什么是数据发散

    在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城 SQL
    SELECT * 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)检查表的关联字段是否有空值。

    数据倾斜 什么是数据倾斜

    数据倾斜最笼统概念就是数据的分布不平衡,爱上你等于爱上寂寞有些地方数据多,有些地方数据少。在计算过程中有些地方数据早早地处理完了,有些地方数据迟迟没有处理完成,造成整个处理流程迟迟没有结束,这就是最直接数据倾斜的表现。

    数据倾斜症状 Hive

    hive自身的MR引擎:发现所有的map task全部完成,并且99%的reduce task完成,只剩下一个或者少数几个reduce task一直在执行,这种情况下一般都是发生了数据倾斜。说白了就是Hive的数据倾斜本质上是MapReduce的数据倾斜。

    Flink

    (1)Flink 任务出现数据倾斜的直观表现是任务节点频繁出现反压。

    (2)部分节点出现 OOM异常,是因为大量的数据集中在某个节点上,导致该节点内存被爆,任务失败重启。

    Spark

    (1)Executor lost,OOM,Shuffle过程出错。

    (2)Driver OOM。

    (3)单个Executor执行时间特别久,整体任务卡在某个阶段不能结束。

    (4)正常运行的任务突然失败。

    怎么避免或解决

    不管再出现分布式计算框架出现数据倾斜问题解决思路如下:很多数据倾斜的问题,都可以用和平台无关的方式解决,比如更好的数据预处理,异常值的过滤等。因此,解决数据倾斜的重点在于对数据设计和业务的理解,这两个搞清楚了,数据倾斜就解决了大部分了。关注这几个方面:

    业务逻辑方面

    (1)数据预处理。

    (2)解决热点数据:分而治之(第一次打散计算,第二次再最终聚合计算)。

    程序代码层面

    (1)导致最终只有一个Reduce任务的,需要想到用替代的关键字或者算子去提升Reduce任务数。

    (2)调参。

    熟悉自己手中的工具(框架)

    优秀的框架已经负重前行给你优化了好多不仅要学,更学会去用,更要努力去完善拓展框架功能。