`

hive-数据倾斜解决详解

    博客分类:
  • hive
阅读更多

hive在跑数据时经常会出现数据倾斜的情况,使的作业经常reduce完成在99%后一直卡住,最后的1%花了几个小时都没跑完,这种情况就很可能是数据倾斜的原因,解决方法要根据具体情况来选择具体的方案

 

1、join的key值发生倾斜,key值包含很多空值或是异常值

这种情况可以对异常值赋一个随机值来分散key

如:

select userid,name 

from user_info a

join(

    select case when userid is null then cast(rand(47)*100000 as int)

    else userid

    from user_read_log

) b on a.userid = b.userid

 

通过rand函数将为null的值分散到不同的值上,在key值比较就能解决数据倾斜的问题

 

注:对于异常值如果不需要的话,最好是提前过滤掉,这样计算量可以大大减少

 

2、当key值都是有效值时,解决办法为设置以下几个参数

 

set hive.exec.reducers.bytes.per.reducer = 1000000000

也就是每个节点的reduce 默认是处理1G大小的数据,如果你的join 操作也产生了数据倾斜,那么你可以在hive 中设定

set hive.optimize.skewjoin = true; 
set hive.skewjoin.key = skew_key_threshold (default = 100000)

hive 在运行的时候没有办法判断哪个key 会产生多大的倾斜,所以使用这个参数控制倾斜的阈值,如果超过这个值,新的值会发送给那些还没有达到的reduce, 一般可以设置成你

(处理的总记录数/reduce个数)的2-4倍都可以接受.

 

倾斜是经常会存在的,一般select 的层数超过2层,翻译成执行计划多于3个以上的mapreduce job 都很容易产生倾斜,建议每次运行比较复杂的sql 之前都可以设一下这个参数. 如果你不知道设置多少,可以就按官方默认的1个reduce 只处理1G 的算法,那么  skew_key_threshold  = 1G/平均行长. 或者默认直接设成250000000 (差不多算平均行长4个字节)

 

3、reduce数太少

set mapred.reduce.tasks=800;

 

默认是先设置hive.exec.reducers.bytes.per.reducer这个参数,设置了后hive会自动计算reduce的个数,因此两个参数一般不同时使用

 

4、对于group by 产生倾斜的问题

 

set hive.map.aggr=true (开启map端combiner); //在Map端做combiner,假如map各条数据基本上不一样, 聚合没什么意义,做combiner反而画蛇添足,hive里也考虑的比较周到通过参数hive.groupby.mapaggr.checkinterval = 100000 (默认)

hive.map.aggr.hash.min.reduction=0.5(默认)

两个参数的意思是:预先取100000条数据聚合,如果聚合后的条数/100000>0.5,则不再聚合

 

set hive.groupby.skewindata=true;//决定 group by 操作是否支持倾斜的数据。注意:只能对单个字段聚合.控制生成两个MR Job,第一个MR Job Map的输出结果随机分配到reduce做次预汇总,减少某些key值条数过多某些key条数过小造成的数据倾斜问题

 

 

5、小表与大表关联

此时,可以通过mapjoin来优化,

 

set hive.auto.convert.join true ; //将小表刷入内存中  

set hive.mapjoin.smalltable.filesize = 2500000 ;//刷入内存表的大小(字节)  

 

 

0
3
分享到:
评论

相关推荐

    Spark-数据倾斜的解决方案.pdf

    ### Spark 数据倾斜解决方案详解 #### 一、理解数据倾斜及其影响 **数据倾斜定义:** 数据倾斜是指在并行处理框架(例如Spark)中,数据集的某一部分数据量显著多于其他部分的情况。这种不均衡的数据分布会导致...

    hive-jdbc-lib.zip

    【描述】该压缩包“hive-jdbc-lib.zip”包含的是Hive JDBC驱动程序,主要用于在Kettle(Pentaho Data Integration)工具中建立与Hive数据仓库的连接。Kettle是一款开源的数据集成工具,通过添加此JDBC驱动,用户可以...

    hive参数配置说明大全

    如果设置为true,则Hive将支持倾斜的数据,默认值为false。 10. hive.merge.mapfiles 该参数决定了是否开启合并Map端小文件,对于Hadoop 0.20以前的版本,起一首新的Map/Reduce Job,对于0.20以后的版本,则是起...

    大数据面试 Hive 八股文

    5. **Hive数据倾斜及其解决方案** - 数据倾斜是由于数据分布不均导致部分Reducer处理大量数据,降低效率。 - 解决方案包括优化分区策略、使用动态分区、自定义分区键等。 6. **Hive的三种自定义函数(UDF、UDTF、...

    hive sql详解 经典

    HiveQL是Hive的SQL方言,支持常见的SQL操作,如SELECT、FROM、WHERE、GROUP BY等,同时也有针对大数据处理的独特功能,如分桶(Bucketing)、分区(Partitioning)和倾斜Join(Skewed Join)优化。 3. **数据模型*...

    【63课时完整版】大数据实践HIVE详解及实战

    50.Hive中的数据倾斜及解决方案-三种join方式 51.Hive中的数据倾斜及解决方案-group by 52.Hive中使用正则加载数据 53. Hive中使用Python脚本进行预处理 第5章:Zeus任务资源调度工具 54.资源任务调度框架介绍 55....

    Hive_QL详解1

    1. **解决数据倾斜**:了解数据分布并手动调整,如重新分区,以平衡数据负载。 2. **减少Job数**:通过合理的设计查询避免过多的Job产生。 3. **设置合适的Task数量**:适当调整Map和Reduce任务数量,优化性能。 4. ...

    Hive语法详解

    - **数据倾斜处理**:通过调整查询逻辑、使用样本表等方式解决数据倾斜问题。 - **并行执行**:开启并行执行以加快查询速度。 - **压缩**:选择合适的压缩算法以减少I/O开销。 以上是关于Hive SQL语法的一些基本...

    HiveSQL执行计划详解.pdf

    ### HiveSQL执行计划详解 #### 一、前言 在大数据处理领域,Hive作为一款广泛使用的数据仓库工具,提供了高效的数据查询与分析能力。为了更深入地理解HiveSQL的执行过程,掌握其执行计划变得尤为重要。执行计划是...

    hive查询优化

    ### Hive查询优化详解 #### 一、Hive基础与架构 **Hive**作为Hadoop生态中的重要组成部分,被广泛应用于大数据分析领域。它通过提供类SQL语言(HiveQL)来简化对Hadoop分布式文件系统(HDFS)中存储的大规模数据集...

    Hive技术平台详解.pptx

    为了优化 Hive 的性能,可以采取一些策略,比如开启 Combiner 减少网络传输,或者针对倾斜数据进行二次分发,以提高数据处理的效率。然而,Hive 主要适用于离线分析,对于实时或准实时的查询需求,可能需要结合其他...

    Hive sql优化

    数据倾斜是指在Hive查询过程中,数据不均匀地分布在不同的Reducer上,导致某些Reducer处理的数据量远大于其他Reducer,从而影响整个查询性能的问题。解决数据倾斜的方法主要有以下几种: 1. **JOIN数据倾斜** - **...

    hive参数优化文档

    - 数据倾斜处理:确保数据在各Reducer间均匀分布,避免出现“热点”现象。 - 动态分区:利用动态分区功能简化数据加载过程中的复杂度。 #### 二、MR阶段优化 MapReduce作为Hive底层的执行引擎,其性能直接影响...

    Hive技术平台详解.pdf

    此外,为了优化性能,Hive还提供了开启Combiner、倾斜数据二次分发等策略,以提高数据处理效率。 Hive数据库结构主要包括表、分区、桶等概念。表是数据的基本组织单位,可以按照业务需求进行分区,进一步细化数据...

    hive操作指南

    - 通过设置`hive.groupby.skewindata`参数来优化数据倾斜问题。 - **9.6 Bucket与sampling** - 使用分桶技术可以优化JOIN操作。 - **9.7 Partition** - 分区可以显著提高查询性能。 - **9.8 JOIN** - **9.8.1 ...

    Hive学习笔记

    这包括但不限于选择合适的文件格式、合理设置MapReduce任务的数量、利用Bucketing和Sampling技术减少数据扫描量、以及优化Join操作以减少数据倾斜等策略。 #### 结论 Hive作为一个强大的大数据处理工具,通过其...

    hive调优策略

    - **问题**:大量小文件的存在不仅会导致Map任务增多,还可能导致数据倾斜等问题。 - **解决**:除了上述提到的合并小文件外,还可以使用Hive的动态分区、桶排序等功能进一步优化。 #### 五、小结 Hive调优是一项...

    Hive.笔记.zip

    为了提升Hive的查询性能,我们可以采用多种策略,如创建合适的数据倾斜解决方案、使用分区、优化JOIN操作、使用bucketing和skewjoin等。此外,选择合适的执行引擎(如Tez或Spark)也能显著提高查询速度。 7. Hive的...

    Hive.代码.zip

    - **数据倾斜**:识别并处理数据分布不均的问题,避免部分节点过载。 - **Hive缓存**:启用ORCFile或Parquet等高效存储格式,以及使用Tez或Spark作为执行引擎,可以显著提升性能。 在实际操作中,我们可以通过Hive...

    hive的优化

    `设置,让Hive自动检测并处理数据倾斜。 - 自定义SQL来手动处理数据倾斜问题,这种方法更为精确有效。 3. **减少Job数量**:尽可能合并多个查询为一个查询,减少任务启动时间,从而提高整体效率。 4. **合理设置...

Global site tag (gtag.js) - Google Analytics