Hive sql数据倾斜及性能优化

一、数据倾斜问题剖析

        数据倾斜是分布式系统不可避免的问题,任何分布式系统都有几率发生数据倾斜,当然数据倾斜问题是在亿级数据造成机器无法应付这么多数据,这时发生数据倾斜,最后很难算出结果。

        hive的原理机制是MR,在MR中最容易出现数据倾斜的就是reduce阶段,因为map到reduce会经过shuffle阶段,在shuffle中默认会按照key进行hash,如果相同的key过多,那么hash的结果就是大量相同的key进入到同一个reduce中,导致数据倾斜。当然map阶段也有可能发生数据倾斜,数据文件在进入map阶段之前会进行切分,默认是128M一个数据块,但是如果当对文件使用Gzip压缩等不支持文件分割操作的压缩方式时,MR任务读取压缩后的文件时,是对它切分不了的,该压缩智慧被一个任务所读取,如果有一个大的压缩文件被map读取时,就会发生map阶段的数据倾斜。

总结:

        发生数据倾斜的原因有两种 :1、任务读取不可分割的大文件;2、任务中需要处理大量相同的key的数据。

 二、怎么判断是否发生了数据倾斜

        假如在hive sql的执行中可以使用explain来描述sql实际执行的整体轮廓,通过执行计划能了解sql程序在转换成相应计算引擎的执行逻辑,从而也能够更好的查看到出现的瓶颈,也就是通过explain定位问题来解决sql的优化。

三、explain

1、查看SQL的执行计划

        explain:查看执行计划的基本信息

        explain dependency:dependency在explain语句中使用会产生有关计划中输入的额外信息,显示了输入的各种属性。

        explain authorization:查看SQL操作相关权限的信息。

        explain vectorization:查看SQL的向量化描述信息,显示为什么未对Map和Reduce进行矢量化。

        explain analyze:用实际的行数注释计划

        explain cbo:输出由Calcite优化器生成的计划。

        explain locks:了解系统将获得那些锁以运行指定的查询

        explain ast:输出查询的抽象语法树

        explain extended:加上extended可以输出有关计划的额外信息。

2 、explain的用法

        explain select sum(id)from student;

四、 数据倾斜解决方案

        在我们的整个hive执行过程中出现的数据倾斜问题还是比较多的,如:

        1、空值引发的数据倾斜

        2、不同数据类型引发的数据倾斜

        3、不可拆分大文件引发的数据倾斜

        4、数据膨胀引发的数据倾斜

        5、表连接时引发的数据倾斜

        6、无法减少数据量引发的数据倾斜

        

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值