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

大数据
数据倾斜最笼统概念就是数据的分布不平衡,有些地方数据多,有些地方数据少。

[[425544]]

数据发散

什么是数据发散

在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

  1. 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)调参。

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

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

责任编辑:张燕妮 来源: 大数据左右手
相关推荐

2020-01-20 14:30:39

HTTP概念标头

2023-03-13 13:36:00

Go扩容切片

2017-10-11 13:42:40

DIY装机电脑

2018-09-11 09:14:52

面试公司缺点

2021-10-09 09:47:14

Java开发 bug

2021-01-07 05:40:13

BLE模块Android

2021-02-22 09:00:00

Jenkins工具开发

2015-12-01 09:02:58

ios界面流畅

2018-08-01 14:45:16

PHP编程语言

2015-04-07 12:19:30

Web开发开发资源

2021-06-01 05:16:49

前端开发技术热点

2012-06-20 15:01:25

iOS开发

2017-11-08 10:54:32

大数据算法机器学习

2023-12-05 08:20:05

单例模式Python

2023-06-13 13:52:00

Java 7线程池

2020-08-27 15:02:11

Progress

2013-10-30 09:53:27

2018-10-20 16:05:12

iOSAPP开发

2019-11-25 21:46:12

数据湖云计算数据仓库

2019-12-24 08:46:49

Redis技巧数据量
点赞
收藏

51CTO技术栈公众号