hive中的map join

本文主要讲述一下自己在hive中使用map join遇到的一些问题。语言过于直白,请谅解

1.什么是map join?

map join主要是在关联的时候使用,hive开启map join后可以将关联的小表放入内存中去执行,以此来提高脚本的运行速度

 

2.map join如何设置?

set hive.auto.convert.join=false;
     --false表示关闭map join

set hive.auto.convert.join=true;
     --true表示开启map join

 

3.map join可能遇到的问题?

使用map join的时候,由于开启将会把小表加载入内存进行执行,所以可能会出现内存溢出的情况

报错信息可能有:

GC overhead limit exceeded

 

如果遇到内存溢出的报错,要么增加内存,要么关闭map join

 

4.map join的部分参数设置

针对内存溢出这个问题,我们可以对放入内存的表的大小进行限定

set hive.auto.convert.join=true;
set hive.mapjoin.smalltable.filesize=1048576;
--  限制内存大小为1M

但这样需要考虑的一个问题是,如果有多个小表进行关联,那么都放入内存是否会溢出呢?如果会,还是关闭map join的好

 

5.关于map join的一点小坑

map join虽然很好,但是会有如下问题:

1)map join关联多个小表时,都放入内存,则考虑内存大小需要针对上述小表大小进行累加

2)大表B表map join关联分区小表A表(200M)时,即使限制了A的分区(取10M),但依旧放入内存的大小依旧是A表的原先大小(200M)

 

言而总之,慎用map join,后续如有理解我会继续更新,谢谢~

你可能感兴趣的:(hive)