hive join优化一:大表关联小表
两个table的join的时候,如果单纯的使用MR的话会消耗大量的内存,浪费磁盘的IO,大幅度的影响性能。
在大小表join的时候,即一个比较小的表和一个较大的表joining,如果使用mapjoin的话,就可以极大的节省时间,甚至达到只需要正常joining的一半时间。
使用mapjoin的话会把小表直接放到内存,然后在map段跟大表进行join操作,其运行过程如下:
1.运行本地的map join任务
2.然后将小表的数据写到XXX.hashtable文件
3.在给这个文件里面上传一个文件进行map join
4.之后才运行了MR代码去运行计数任务
其参数为: hive.auto.convert.join=true,启用此参数时,Hive在执行时候会自动转化为MapJoin
后记:
启用mapjoin后,有可能会比Common Join消耗多一些资源,这点需要注意,但其好处是运行SQL的时间极大的缩短。