Hive中map-join 和 reduce-join

配置
  • hive.auto.convert.join
    0.11版本之后默认是true。
  • hive.mapjoin.smalltable.filesize/hive.smalltable.filesize
    map join通常用于一个很小的表和一个大表进行join的场景,具体小表有多小,由参数 hive.mapjoin.smalltable.filesize来决定,该参数表示小表的总大小,默认值为25000000字节,即25M。 一般默认就够了,无须修改。
map-join

在这里插入图片描述

  • 说明:
    • hive会自动选择小表(元数据中会有记录,知道哪个表示大表还是小表),然后cache的各个节点上。然后直接与关联的表进行map,没有reduce操作,也就没有shuffle。但是需要保证内存充足。
    • 若所有表中只有一张小表,那可在最大的表通过Mapper的时候将小表完全放到内存中,Hive可以在map端执行连接过程,称为map-side join,这是因为Hive可以和内存的小表逐一匹配,从而省略掉常规连接所需的reduce过程。即使对于很小的数据集,这个优化也明显地要快于常规的连接操作。其不仅减少了reduce过程,而且有时还可以同时减少Map过程的执行步骤。
    • 其适用于小表JOIN大表的场景,由于表的JOIN操作是在Map端且在内存进行的。
reduce-join

在这里插入图片描述

  • 说明:
    • 别称shuffle join、common join
    • Map阶段
      读取源表的数据,Map输出时候以Join on条件中的列为key,如果Join有多个关联键,则以这些关联键的组合作为key;
      Map输出的value为join之后所关心的(select或者where中需要用到的)列;同时在value中还会包含表的Tag信息,用于标明此value对应哪个表;
      按照key进行排序
    • Shuffle阶段
      根据key的值进行hash,并将key/value按照hash值推送至不同的reduce中,这样确保两个表中相同的key位于同一个reduce中
    • Reduce阶段
      根据key的值完成join操作,期间通过Tag来识别不同表中的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值