hive 数据倾斜实际问题中总结

1.数据倾斜原因

a.大表(2.8G)与小表关联(580K)

b.大表(2.8G)与大表(3.0G)关联

首先谈论大表与小表的关联导致数据倾斜问题 

实例如下:

大表数据格式:


小表数据格式:


关联语句


hive>select  *  from report_tour_spot_detail s join report_tour_msg_detail r  on s.scenicid=r.scenicid;


上面情况会产生数据倾斜,原因:由于大表与小表数据量相差3000倍,遍历整个过程需要大表数据条数X小表的数据条数=总量。这样会导致数据严重倾斜。具体表现:后台数据写入一直出去某种状态如控制台一直处于38%处理状态。二,磁盘的容量被大量占用,严重会导致集群崩溃。

解决方案:左右表关联查询将小表置于左侧。这样其数据先读入磁盘中(原理仅用map在磁盘中处理),减少线上(reduce)数据处理的压力。


大表与大表关联查询

大表格式:


大表格式:



hive>select  /*+ MAPJOIN(b) */ s.tourname, s.rank, s.spotname, s.spotprovince, s.spotcityname, s.tourtype, r.sex, r.birthday, r.tel, r.certificate_no, r.close_total_price, r.occ_date 
from scenic_info_detail s join report_tour_msg_detail r on s.scenicid=r.scenicid;

原因:由于两张表中scenicid字段中分别存在大量的重复数据。如1105字段在scenic_info_detail表中有大量的重复。而在report_tour_msg_detail表中scenicid字段也有重复的数据,二者对该字段关联查询时导致数据倾斜。








你可能感兴趣的:(Hive,数据倾斜)