二、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)参数设置
· 开启动态分区
启用动态分区功能