概述
二、Hive数据倾斜问题优化
1.现象
当Hive放生数据倾斜的时候,我们在使用HQL运行mr的时候可以发现,mapreduce卡在99%
2.当Hive发生数据倾斜的时候我应该怎么办呢?
第一种方案,数据倾斜五分就是key的数据量非常不均匀,我们可以开启map聚合的参数(hive.map.aggr=ture),开启之后会把数据现在map端进行聚合,当reduce端聚合的时候就只需要聚合map端聚合完的参数就可以了
第二种是当大表和小表进行JOIN的时候,也可能导致数据倾斜。为了解决这个问题,考虑使用到mapjoin,mapjoin会把小表全部读入内存中,在map阶段直接拿另外一个表的数据和在内存中表的数据进行匹配,由于mapjion是在map端进行了join操作,省去了reduce的运行,所以效率会快很多
第三种是当大表和大表join的时候发生数据倾斜,具体操作室建立一个numbers表,其值只有一列int 行,比如从1到10(具体值可根据倾斜程度确定),然后放大B表10倍,再取模join
三、分区
1.Hive静态分区
就是在不开启动态分区的条件下都是静态分区,使用方式就是HQL
- Hive动态分区
1)参数设置
· 开启动态分区
启用动态分区功能 hive> set hive.exec.dynamic.partition=true;
注:hive2.x该参数默认为true,1.x为false
· 模式设置(严选模式/非严选模式)
设置这个参数为nostrict
hive> set hive.exec.dynimac.partiton.mode=nostrict
默认情况下是strict
2)动态分区的相关参数
hive.exec.max.dynimac.partition.pernode 这个参数表示每个mr执行的节点上,能创建的最大分区数量(默认100)
hive.exec.max.dynimac.partition 这个参数表示所有mr执行的节点上,能创建的最大分区数量(默认1000)
hive.exec.max.creat.files 这个参数代表所有mr job能创建文件的最大数量
3)动态分区加载数据的方法
第一步:创建原数据表
第二部:load data加载数据到原数据表
第三部:使用from into table inset into table select 。。。。加载数据
4)静态分区与动态分区的区别
静态分区是手动指定分区的,动态分区是根据数据来判断
5)静态分区结合动态分区使用
动静结合使用的话,静态分区值必须在动态分区值的前面
最后
以上就是专注小蝴蝶为你收集整理的Hive数据倾斜优化和分区的全部内容,希望文章能够帮你解决Hive数据倾斜优化和分区所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复