Hive性能调优(二)----数据倾斜
Hive在分布式运行的时候最害怕的是数据倾斜,这是由于分布式系统的特性决定的,因为分布式系统之所以很快是由于作业平均分配给了不同的节点,不同节点同心协力,从而达到更快处理完作业的目的。
Hive中数据倾斜的原因:
- 数据在分布式节点上分部不均衡
- join时某些key可能特别大(常见null值)
- group by 时某个值可能特别多
- count(distinct key...)时有可能会出现数据倾斜,因为其内部处理会进行group by 操作
- join
join时key最好是分散的,如果一个key的数据量特别大,有可能会出现数据倾斜和OOM。一个核心就是小表join大表,可以在reduce阶段,左侧的小表全部加载到内存,降低OOM的风险
- 大表join大表
数据倾斜,例如null值。解决办法一般是打散null值,例如使用随机数等。
- mapjoin
小表join(超)大表的时候,可以采用mapjoin 的方式把小表全部加载到mapper端的内存中。
不会自动进行mapjoin,需要设置:
set hive.auto.convert.join=true; //hive在进行join的时候会判断左表的大小来决定是否进行mapJoin
set hive.mapjoin.smalltable.filesize=128000000 //hive在进行join的时候会判断左表的大小来决定是否进行mapJoin的大小阈值 字节数
set hive.mapjoin.cache.numrows=1000000 //hive在进行join的时候会判断左表的大小来决定是否进行mapJoin的大小阈值--数据行数上述参数可以根据实际的硬件机器的内存进行调整,对性能有至关重要的影响,因为没有了shuffle,对于mapjoin我们能够使用mapper端JVM中多大的内存?
set hive.mapjoin.followby.gby.localtask.max.memory.usage=0.55 //百分比
set hive.mapjoin.localtask.max.memory.usage=0.9 //百分比 - group by
可以设置在Mapper端进行部门聚合,最后在reduce端进行全局聚合
set hive.map.aggr=true; //默认开启,
set hive.groupby.mapaggr.checkinterval=1000000; //在Map端进行聚合操作的条目数
//防止数据倾斜
set hive.groupby.skewindata=true; //会产生Mapper-Reducer-Reducer的结构生成查询计划时,实际上会生成两个job,第一个job会通过自己的算法打散倾斜的key并进行聚合操作并保留结果,第二个job会完成全部的Group by 操作,相当于Mapper-Reduce-Reduce的结构。(第一个会把Mapper的输出随记分布到Reduce中,每个Reduce做部分聚合并且保存结果,这样导致相同的groupby key分配到不同的Reduce上,一定程度上避免数据倾斜,接下来另外一个Job根据前一个Job预处理数据的结果再进行Group By到Reduce中)
- count(distinct ) 如果某个值特别多,容易产生数据倾斜。
解决思路:
在查询语句中,例如对null值进行过滤,在结果上加1。 count(uid) (uid中去掉了值为null)的记录,所以在最后的结果 cnt 的基础上加1, 即cnt+1
Hive性能调优(二)----数据倾斜的更多相关文章
- Spark学习之路 (九)SparkCore的调优之数据倾斜调优
摘抄自:https://tech.meituan.com/spark-tuning-pro.html 数据倾斜调优 调优概述 有的时候,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时Sp ...
- Spark学习之路 (九)SparkCore的调优之数据倾斜调优[转]
调优概述 有的时候,我们可能会遇到大数据计算中一个最棘手的问题--数据倾斜,此时Spark作业的性能会比期望差很多.数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的 ...
- Spark 调优之数据倾斜
什么是数据倾斜? Spark 的计算抽象如下 数据倾斜指的是:并行处理的数据集中,某一部分(如 Spark 或 Kafka 的一个 Partition)的数据显著多于其它部分,从而使得该部分的处理速度 ...
- 【Hive】Hive笔记:Hive调优总结——数据倾斜,join表连接优化
数据倾斜即为数据在节点上分布不均,是常见的优化过程中常见的需要解决的问题.常见的Hive调优的方法:列剪裁.Map Join操作. Group By操作.合并小文件. 一.表现 1.任务进度长度为99 ...
- Hive(十)Hive性能调优总结
一.Fetch抓取 1.理论分析 Fetch抓取是指,Hive中对某些情况的查询可以不必使用MapReduce计算.例如:SELECT * FROM employees;在这种情况下,Hive可以简单 ...
- 【Spark调优】数据倾斜及排查
[数据倾斜及调优概述] 大数据分布式计算中一个常见的棘手问题——数据倾斜: 在进行shuffle的时候,必须将各个节点上相同的key拉取到某个节点上的一个task来进行处理,比如按照key进行聚合或j ...
- HDP Hive性能调优
(官方文档翻译整理及总结) 一.优化数据仓库 ① Hive LLAP 是一项接近实时结果查询的技术,可用于BI工具以及网络看板的应用,能够将数据仓库的查询时间缩短到15秒之内,这样的查询称之为Int ...
- spark性能调优06-数据倾斜处理
1.数据倾斜 1.1 数据倾斜的现象 现象一:大部分的task都能快速执行完,剩下几个task执行非常慢 现象二:大部分的task都能快速执行完,但总是执行到某个task时就会报OOM,JVM out ...
- spark调优篇-数据倾斜(汇总)
数据倾斜 为什么会数据倾斜 spark 中的数据倾斜并不是说原始数据存在倾斜,原始数据都是一个一个的 block,大小都一样,不存在数据倾斜: 而是指 shuffle 过程中产生的数据倾斜,由于不同的 ...
随机推荐
- ubuntu18.10 上安装docker容器
网上有的安装步骤太复杂,并且安装过程中容易出错,其它安装不难,只需一条命令即可. 安装成功后,使用命令查看docker状态 systemctl status docker 安装前更新下包源 sudo ...
- Python Web(三)
Infi-chu: http://www.cnblogs.com/Infi-chu/ 一.Django母版渲染 1.创建母版文件 base.html <!DOCTYPE html> < ...
- CKEditor5 使用第二天 获取回传数据,图片上传
1.当系统中存在编辑功能时,需要将数据库中数据回显到页面,因此采用了最一般的方法,通过隐藏的input标签存贮,在通过CkEditor5中的setData方法将数据赋值到富文本框中 <texta ...
- ckeditor5 使用第一天 下载并加载居中,居左,居右功能
官方网站地址https://ckeditor.com/,下载zip包或者从git上下载, 下载完成后解压文件,将文件复制到项目中 , 引用ckeditor.js,zh-cn.js路径到项目中, 初始化 ...
- SQL Server 通过游标重新定义单据数据的单据编号
DECLARE @Index INTSET @Index=100DECLARE UpdateCursor CURSOR FOR (SELECT DISTINCT AA.Id FROM dbo.表 ...
- [Go] 使用protobuf进行序列化和反序列化
先定义消息类型 orders.proto syntax = "proto2"; package message; message Orders { required int32 o ...
- Fiddler应用——Fiddler过滤功能
Fiddler的过滤功能在Fiddler右面板处,点击Filters显示如图所示面板. 如图所示,Fiddler的过滤面板主要分为几个部分: 1.Use Filters:是否启用过滤器 2.Actio ...
- jstree级联禁用后代节点的选择框
用jstree+jquery,做的树形展示. 这个话题,在Stack Overflow上有问答,要获取要禁用的节点,然后用获取子节点方法遍历后代节点,设置禁用选择框. 之后发现,jstree的获取子节 ...
- 垃圾收集器GC
(1)DefNew(串行)收集器 Serial(串行)垃圾收集器是最基本.发展历史最悠久的收集器:JDK1.3.1前是HotSpot新生代收集的唯一选择: 特点: (1) 针对新生代采用复制算法,单线 ...
- linux umask计算方法
1. umask用于设定默认的新建文件或目录的权限 查看umask当前值命令: umask -p 计算创建出的file权限方法: 如果umask值的每位数都是偶数,使用666按位减umask的值即可 ...