mapjoin解析
来源:互联网 发布:centos yum安装包下载 编辑:程序博客网 时间:2024/06/05 18:56
今天遇到一个hive的问题,如下hive sql:
select f.a,f.b from A t join B f on ( f.a=t.a and f.ftime=20110802)
该语句中B表有30亿行记录,A表只有100行记录,而且B表中数据倾斜特别严重,有一个key上有15亿行记录,在运行过程中特别的慢,而且在reduece的过程中遇有内存不够而报错。
为了解决用户的这个问题,考虑使用mapjoin,mapjoin的原理:
MAPJION会把小表全部读入内存中,在map阶段直接拿另外一个表的数据和内存中表数据做匹配,由于在map是进行了join操作,省去了reduce运行的效率也会高很多
这样就不会由于数据倾斜导致某个reduce上落数据太多而失败。于是原来的sql可以通过使用hint的方式指定join时使用mapjoin。
select /*+ mapjoin(A)*/ f.a,f.b from A t join B f on ( f.a=t.a and f.ftime=20110802)
再运行发现执行的效率比以前的写法高了好多。
mapjoin还有一个很大的好处是能够进行不等连接的join操作,如果将不等条件写在where中,那么mapreduce过程中会进行笛卡尔积,运行效率特别低,如果使用mapjoin操作,在map的过程中就完成了不等值的join操作,效率会高很多。
例子:
select A.a ,A.b from A join B where A.a>B.a
简单总结一下,mapjoin的使用场景:
1. 关联操作中有一张表非常小
2.不等值的链接操作
MapJoin原理
MapJoin简单说就是在Map阶段将小表读入内存,顺序扫描大表完成Join。
上图是Hive MapJoin的原理图,出自Facebook工程师Liyin Tang的一篇介绍Join优化的slice,从图中可以看出MapJoin分为两个阶段:
通过MapReduce Local Task,将小表读入内存,生成HashTableFiles上传至Distributed Cache中,这里会对HashTableFiles进行压缩。
MapReduce Job在Map阶段,每个Mapper从Distributed Cache读取HashTableFiles到内存中,顺序扫描大表,在Map阶段直接进行Join,将数据传递给下一个MapReduce任务。
转自:http://blog.csdn.net/xqy1522/article/details/6699740
- mapjoin解析
- MapJoin原理
- mapjoin测试
- hive mapjoin
- Hive MapJoin
- Hive mapjoin 与 Bucket mapjoin
- hive mapjoin使用
- 使用mapjoin效率对比
- hive MapJoin优化
- Hive MapJoin 优化
- #Hive#Mapjoin的使用
- Hive优化----MapJoin 优化
- Hive中的mapjoin
- hive mapjoin使用
- Hive中的mapjoin
- hive mapjoin使用
- hive mapjoin使用
- hive mapjoin使用
- 解决jquery submit()提交表单提示 e[h] is not a function
- 组合模式
- Map与HashMap和Set的区别
- Weex入门教程之8,关注weex-toolkit命令变更
- Android基础以及进阶之路
- mapjoin解析
- 浅析一下火绒杀毒
- java弹出一个简单的文本框
- Android初始基础
- 实验报告模板
- 前端资源收集
- Hive 窗口函数、分析函数
- charindex()的用法
- 有毒的蘑菇-基于规则学习(独立而治之算法)