您的足迹:首页 > Hive >Hive中使用MAP JOIN

Hive中使用MAP JOIN

摘要: 1 概述 若所有表中只有一张小表,那可在最大的表通过Mapper的时候将小表完全放到内存中,Hive可以在map端执行连接过程,称为map-side join,这是因为Hive可以和内存的小表逐一匹配,从而省略掉常规连接所需的reduce过程。即使对于很小的数据集,这个优化也明显地要快于常规的连接操作。其不仅减少了reduce过程,而且有时还可以同时减少Map过程的执行步骤。 使用MA

1 概述

若所有表中只有一张小表,那可在最大的表通过Mapper的时候将小表完全放到内存中,Hive可以在map端执行连接过程,称为map-side join,这是因为Hive可以和内存的小表逐一匹配,从而省略掉常规连接所需的reduce过程。即使对于很小的数据集,这个优化也明显地要快于常规的连接操作。其不仅减少了reduce过程,而且有时还可以同时减少Map过程的执行步骤。

使用MAPJOIN可解决以下实际问题:

A 有一个极小的表<1000行(a是小表)

B 需要做不等值join操作(a.x<b.y或者a.x like b.y等)。普通join语法不支持不等于操作,Hive语法解析会直接抛出错误。

select /*+ MAPJOIN(a)*/
a.name, b.stu_id
from student_table_small a
join student_table_big b
where b.age>=a.age

2 相关参数

2.1 小表自动选择Mapjoin

set hive.auto.convert.join=true;

默认值:false。该参数为true时,Hive自动对左边的表统计量,若是小表就加入内存,即对小表使用Map join

2.2 小表阀值

set hive.mapjoin.smalltable.filesize=25000000;

默认值:25M

2.3 map join做group by操作时,可使用多大的内存来存储数据。若数据太大则不会保存在内存里

set hive.mapjoin.followby.gby.localtask.max.memory.usage;  

默认值:0.55

2.4 本地任务可以使用内存的百分比

set hive.mapjoin.localtask.max.memory.usage;  

默认值:0.90

参考地址:http://blog.csdn.net/kwu_ganymede/article/details/51365002

本博客所有文章如无特别注明均为原创。作者:数据为王复制或转载请以超链接形式注明转自 数据为王
原文地址《Hive中使用MAP JOIN

相关推荐


  • blogger

发表评论

路人甲 表情
看不清楚?点图切换 Ctrl+Enter快速提交

网友评论(0)