IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 解决Hive和Spark数据倾斜 -> 正文阅读

[大数据]解决Hive和Spark数据倾斜

一、Hive数据倾斜

一般都发生在Sql中group?by和join?on上

1.不同数据类型关联产生数据倾斜

例如:两个表进行关联,其中一个字段类型是int一个是String

解决:把数字类型转换成字符串类型

2.空值分布:经常有大量的空值数据进入到一个reduce中导致数据倾斜

解决:自定义分区,将为空的key转变为字符串+随机数,将因为空值造成的数据倾斜数据分不到不同的reducer中(如果一下特殊异常值不需要可以直接where过滤掉)

3.group?by代替distinct

4.开启mapjoin

5.开启负载均衡:先随机分发处理再按照key?group by来分发处理

6.设置多个reduce数量,默认为1


二、Spark数据倾斜

  • Executor?lost,OOM,Shuffle过程出错
  • Driver OOM
  • 单个Executor执行时间特别久?整体任务卡住
  • 正常运行的任务突然失败

1.快速定位到导致数据倾斜的代码

Spark数据倾斜只会发生在shuffle过程中

触发shuffle的算子有:distinct/groupByKey/reduceByKey/aggregateByKey/join/repatition/cogroup等

(出现数据倾斜可能就是使用了这些算子其中的某一个导致的)

1.1某个task执行的特别慢

首先看数据倾斜发生在第几个stage中:

1)yarn-cluster模式:通过Spark Web UI(4040)来查看当前运行到了第几个stage

2)yarn-client模式:通过在提交的机器本地是直接可以看到log,在log中查看运行情况

查看什么:

1)task运行时间,有的task几秒钟运行完有的task几分钟才运行完

2)task数据量,运行时间短的task处理处理几kb的数据,运行时间久的处理几千kb,数据量差值大

1.2查看导致数据倾斜的key分布情况:

可以pairs采样10%的样本数据使用countByKey算子统计出每个key的出现次数。

2.解决方案

1.频繁使用hive表,本身数据不均匀,某个key对应100万,某个key对应10条

可以通过hive进行预处理或预先和其他表进行join,避免了shuffle类算子(治标不治本)

2.导致数据倾斜的key就几个,99%的key对应10条数据,但是只有一个key对应100万

where子句过滤掉这些key或者使用fillter算子(使用场景不多)

3.提升shuffle并行度,默认200,缩短task执行时间(能够缓解不能根除)

4.聚合类的shuffle算子或在sparksql中使用group?by语句进行分组的(聚合类)

局部聚合+全局聚合,两次mr,每个key+随机值,进行局部聚合,去掉key前缀进行全局聚合

5.对rdd使用join类操作或spark?sql中使用join(rdd或表的数据比较小)

小表join大表?规避shuffle

不适用join算子进行连接操作,使用广播变量与map类算子实现join,规避掉shuffle类操作,小表进行广播(常用最优方案)

6.两个rdd或表join时数据量都比较大,其中一个因为rdd/表中的少数几个key数据量过大,而另一个分布都比较均匀

通过simple算子采样研究计算数据量最大的是哪几个key,将这几个key对应的数据从原rdd中拆分出来形成单独rdd并给每个key+随机数前缀打散成n份去进行join,此时这几个key对应的数据不会集中在少数几个task上而是分散到多个task进行join了

7.进行join操作时RDD中有大量的key导致数据倾斜进行拆分key也没意义

打散大表?扩容小表

使用随机前缀+扩容rdd进行join(缓解数据倾斜对内存要求高)

总结:如果只是处理简单的小场景使用上述方法基本可以解决,如果复杂问题建议多种组合一起使用!

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-30 12:07:06  更:2021-08-30 12:09:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:43:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码