MAPREDUCE服务 MRS-Hive Join数据优化:Map Join
Map Join
Hive的Map Join适用于能够在内存中存放下的小表(指表大小小于25000000 BYTES),通过“hive.mapjoin.smalltable.filesize”定义小表的大小,默认为25000000 BYTES。
Map Join的方法有两种:
- 使用/*+ MAPJOIN(join_table) */。
- 执行语句前设置如下参数,当前版本中该值默认为“true”。
set hive.auto.convert.join=true;
使用Map Join时没有Reduce任务,而是在Map任务前起了一个MapReduce Local Task,这个Task通过TableScan读取小表内容到本机,在本机以HashTable的形式保存并写入硬盘上传到DFS,并在Distributed Cache中保存,在Map Task中从本地磁盘或者Distributed Cache中读取小表内容直接与大表join得到结果并输出。
使用Map Join时需要注意小表不能过大,如果小表将内存基本用尽,会使整个系统性能下降甚至出现内存溢出的异常。