数据倾斜即为数据在节点上分布不均,是常见的优化过程中常见的需要解决的问题。常见的Hive调优的方法:列剪裁Map Join操作
Group By操作
合并小文件

一、表现

1.任务进度长度为99%,在任务监控页面中发现只有几个 reduce 子任务未完成;

2.单一 reduce 记录与平均记录数差异过大(大于3倍),最长时长>>平均时长;

3.job数多的,效率低,多次关联后,产生几个jobs,起码半小时以上才跑完;

二、原因

1.key分布不均;

2.业务数据本身问题;

3.建表有问题;

4.sql语句本身数据倾斜;

数据倾斜问题:

关键词

情形

后果

join

1.小表与大表.其中一表较小,但key集中;

或空值过多;

分发到一个或几个reduce上数据远大于平均值;空值由一个reduce处理,很慢

group by

group by 维度过小,某值数量过多

处理某值的reduce很耗时,解决:用sum() group代替count
(distinct)

count distinct

某特殊值过多

处理此特殊值reduce耗时

三、解决思路

1.好的模型设计事半功倍;

2.解决数据倾斜问题;

3.减少job数;

4.设置合理的map,reduce 的task 数,有效提升性能;

5.自己动手写sql 可以解决数据倾斜;

6.对sum, count不存在数据倾斜问题,自己写;

7.对小文件合并;

8.优化时把握整体,单个作业最优不一定整体最优。

(注:sql相关→(1)倾斜的数据用 map join,不倾斜的数据用
join;

个具有相同列的数据类型的结果放到一起显示,并且不去重;

(3)有几个列参与join就有几个job,不是看独立的语句(eg.select)有几个!)

四、解决方案

 4.1 参数调节

hive.map.aggr = true (map 端部分聚合,当于 combiner)

hive.groupby.skewindata = true (有数据倾斜时负载均衡

 

4.2 sql语句调节

(1) 如何join:关于驱动表的选取,应选分布均匀的作为驱动表;做好列剪裁
filter 操作
,达到两表 join 时,数量变小的效果。

(2) 大小表join:使用map join,让小表先进内存,在 map 端完成reduce 。

(3) 大表 join 大表:把空值 null key变成字符串加上随机数,倾斜数据分到不同 reduce 上。

(4) groupby 维度过小:采用sum() group by 代替count (distinct) 完成计算。

五、典型案例

5.1. 空值产生的数据倾斜:userid为空的表去 join另一表

方法一:为空的userid 不参与关联:select * from a join b on a.userid is not null and a.id = b.id

方法二:赋空值分新的 key值,字符串加上随机数。(比方法一好,io少了,作业job也少了:方法一读取log 为2次,job为2;方法二读取的job 为1)

5.2 不同数据类型关联的数据倾斜:个表中,一个为 string,一个为
int

解决方法:把数值类型转化为 string。

eg. select *from a left join b on (a.id = cast(b.id as string))

5.3 小表 join 大表时,小表很大:一般 map join会有 bug

两个待连接表中,小表可以进内存(小表小于内存装得下),而大表很大。可以将小表复制多份,让每个Map Task 内存中存在一份(比如放到 hash table 中),然后只扫描大表。

对大表中每条记录 key-value,在 hash table中查找是否有相同的 key 记录,如果有,连接后输出即可。(不用 reducer,直接在 map端就可以完成
join)

【Hive】Hive笔记:Hive调优总结——数据倾斜,join表连接优化的更多相关文章

  1. Spark学习之路 (九)SparkCore的调优之数据倾斜调优

    摘抄自:https://tech.meituan.com/spark-tuning-pro.html 数据倾斜调优 调优概述 有的时候,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时Sp ...

  2. Spark学习之路 (九)SparkCore的调优之数据倾斜调优[转]

    调优概述 有的时候,我们可能会遇到大数据计算中一个最棘手的问题--数据倾斜,此时Spark作业的性能会比期望差很多.数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的 ...

  3. spark调优篇-数据倾斜(汇总)

    数据倾斜 为什么会数据倾斜 spark 中的数据倾斜并不是说原始数据存在倾斜,原始数据都是一个一个的 block,大小都一样,不存在数据倾斜: 而是指 shuffle 过程中产生的数据倾斜,由于不同的 ...

  4. Spark 调优之数据倾斜

    什么是数据倾斜? Spark 的计算抽象如下 数据倾斜指的是:并行处理的数据集中,某一部分(如 Spark 或 Kafka 的一个 Partition)的数据显著多于其它部分,从而使得该部分的处理速度 ...

  5. 【Spark调优】数据倾斜及排查

    [数据倾斜及调优概述] 大数据分布式计算中一个常见的棘手问题——数据倾斜: 在进行shuffle的时候,必须将各个节点上相同的key拉取到某个节点上的一个task来进行处理,比如按照key进行聚合或j ...

  6. 《Kafka权威指南》读书笔记-操作系统调优篇

    <Kafka权威指南>读书笔记-操作系统调优篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 大部分Linux发行版默认的内核调优参数配置已经能够满足大多数应用程序的运 ...

  7. 【Spark篇】---Spark调优之代码调优,数据本地化调优,内存调优,SparkShuffle调优,Executor的堆外内存调优

    一.前述 Spark中调优大致分为以下几种 ,代码调优,数据本地化,内存调优,SparkShuffle调优,调节Executor的堆外内存. 二.具体    1.代码调优 1.避免创建重复的RDD,尽 ...

  8. 大数据技术之_08_Hive学习_04_压缩和存储(Hive高级)+ 企业级调优(Hive优化)

    第8章 压缩和存储(Hive高级)8.1 Hadoop源码编译支持Snappy压缩8.1.1 资源准备8.1.2 jar包安装8.1.3 编译源码8.2 Hadoop压缩配置8.2.1 MR支持的压缩 ...

  9. Hive(十二)【调优】

    目录 1.Fetch抓取 2.本地模式 3.表的优化 3.1大小表join 3.2大表Join大表 3.3map join 3.4group By 3.5 count(distinct) 3.6笛卡尔 ...

随机推荐

  1. Introducing Gradle (Ep 2, Android Studio)

    https://www.youtube.com/watch?v=cD7NPxuuXYY    Introducing Gradle (Ep 2, Android Studio) https://www ...

  2. java 最长回文字串

      package string.string1_6; public class LongestPalidrome { /** * 使用常规方法, 以字符串的每一个字符作为中心进行判断, 包括奇数和偶 ...

  3. SQL 游标示例

    DECLARE @i INT ) --给初始值 CREATE TABLE #temp_test --创建临时表 ( num ) ) ) BEGIN INSERT INTO #temp_test ( n ...

  4. spawn类参数command详解

    我们主要来看spawn类它的构造方法参数主要有command,从字面上就是指spawn类的子程序用来执行的子程序,也就是系统所能够执行的相应的命令,对于command这个参数,我们是以字符串的方式给出 ...

  5. MYSQL数据库装在C盘的,怎么移到D盘

    直接移动过去就是了,遇到问题再根据提示修改. 一般需要移动前删除已经安装的MYSQL服务,命令是:mysqld.exe --remove移动后重新安装服务,命令是:mysqld.exe --insta ...

  6. contentprovider 实例

    Provider端 public class PersonProvider extends ContentProvider { //用来存放所有合法的Uri的容器 private static Uri ...

  7. php不使用递归实现无限极分类

    无限极分类常用的是递归,但是比较不好理解,其实可以用数据库path,pid两个字段的设计来实现无限分类的功能 1.数据库设计 通过上图可以看出pid就是该栏目的父id,而path = 父path+pi ...

  8. 升级python到最新2.7.13

    python2.7是2.X的最后一个版本,同时也加入了一部分3.X的新特性.并且具有更好的性能,修改多个bug.所以决定升级到最新的2.7版,我的目前的版本是2.6.6 查看当前python版本 # ...

  9. HTML中级教程 自定义列表

    在HTML初级教程中我们教授了无序列表和有序列表,很不幸,很像Peter Cushing的博士Who,自定义列表很容易被忽略.可能是因为自定义列表需要比无序列表和有序列表更多的设置和似乎更少用.当遭遇 ...

  10. HDU2049 不容易系列之(4)考新郎 —— 错排

    题目链接:https://vjudge.net/problem/HDU-2049 不容易系列之(4)——考新郎 Time Limit: 2000/1000 MS (Java/Others)    Me ...