业务需要,要在Hive里把两个表关联起来,所以需要用到join语句,然后第一次随手写了join,直接跑。。然后跑了6个小时没跑完,被管理员取消了。。于是想办法改进
首先想的是不直接join两个表的所有属性,而是分别找到各自需要的属性,用各自的where条件限制,用子嵌套语句完成,最后在group by一下。
试着跑了一下,跑了很久很久。。。。。无法忍耐!还要再想办法
查看一下表1里一个分区的信息(有四个字段划分分区)
58亿条!!并且有42列!!怪不得跑不动!!
表2:
5万多条,相比之下非常非常小。
很显然数据倾斜非常严重,去找解决方法,大表join小表,很容易想到使用map join,在map端先做join,可以大大减轻reduce端的压力。
set hive.auto.convert.join=true;
设置使用map join ,再跑一次
十几分钟结束!