mapjoin的使用方法以及注意事项
mapjoin的简介
MAPJION会把小表全部加载到内存中,在map阶段直接拿另外一个表的数据和内存中表数据做匹配,由于在map端是进行了join操作,省去了reduce运行的时间,算是hive中的一种优化
mapjoin的使用方法
例如:
select /*+ mapjoin(t)*/ f.a,f.b from A f join B t on f.a=t.a
1
前提b表是一张小表,默认25m的表是小表
注意事项
使用mapjoin时,一次性加载到内存中的表最多是8张,如果超过8张小表,应该嵌套一层子循环,将多余的表在外层中写入mapjion里面,代码实现如下:
在Hive调优里面,经常会问到一个很小的表和一个大表进行join,如何优化。
Shuffle 阶段代价非常昂贵,因为它需要排序和合并。减少 Shuffle 和 Reduce 阶段的代价可以提高任务性能。MapJoin通常用于一个很小的表和一个大表进行join的场景,具体小表有多小,由参数hive.mapjoin.smalltable.filesize来决定,该参数表示小表的总大小,默认值为25000000字节,即25M。Hive0.7之前,需要使用hint提示 /*+ mapjoin(table) */才会执行MapJoin,否则执行Common Join,但在0.7版本之后,默认自动会转换Map Join,由参数hive.auto.convert.join来控制,默认为true.假设a表为一张大表,b为小表,并且hive.auto.convert.join=true,那么Hive在执行时候会自动转化为MapJoin。MapJoin简单说就是在Map阶段将小表数据从 HDFS 上读取到内存中的哈希表中,读完后将内存中的哈希表序列化为哈希表文件,在下一阶段,当 MapReduce 任务启动时,会将这个哈希表文件上传到 Hadoop 分布式缓存中,该缓存会将这些文件发送到每个 Mapper 的本地磁盘上。因此,所有 Mapper 都可以将此持久化的哈希表文件加载回内存,并像之前一样进行 Join。顺序扫描大表完成Join。减少昂贵的shuffle操作及reduce操作
MapJoin分为两个阶段:
通过MapReduce Local Task,将小表读入内存,生成HashTableFiles上传至Distributed Cache中,这里会HashTableFiles进行压缩。
MapReduce Job在Map阶段,每个Mapper从Distributed Cache读取HashTableFiles到内存中,顺序扫描大表,在Map阶段直接进行Join,将数据传递给下一个MapReduce任务
1,什么是MapJoin?
MapJoin顾名思义,就是在Map阶段进行表之间的连接。而不需要进入到Reduce阶段才进行连接。这样就节省了在Shuffle阶段时要进行的大量数据传输。从而起到了优化作业的作用。
2,MapJoin的原理:
通常情况下,要连接的各个表里面的数据会分布在不同的Map中进行处理。即同一个Key对应的Value可能存在不同的Map中。这样就必须等到Reduce中去连接。
要使MapJoin能够顺利进行,那就必须满足这样的条件:除了一份表的数据分布在不同的Map中外,其他连接的表的数据必须在每个Map中有完整的拷贝。
mapjoin的使用方法以及注意事项相关推荐
- Dubbo+zookeeper使用方法以及注意事项
Dubbo+zookeeper使用方法以及注意事项 最近在一个项目中想做一个数据库查询的服务,目的是将数据库查询这块从程序中脱离出来,形成一个公共的服务平台,大家都可以调用,经过考虑决定选用Dubbo ...
- 【PC工具】200412更新百度网盘下载工具——最终最简单百度网盘下载方法及注意事项...
今天有朋友在群里问会员账号,上次好像说过,这种公用的会员账号基本下载量都超了,同样也限速,所以这种账号一般都用来找资源. 百度网盘这个题材也来回来去发过好几个工具了,太麻烦不说,老这么道高一尺魔高一丈 ...
- 【PC工具】200324更新百度网盘下载工具——最新百度网盘下载工具使用方法及注意事项...
今天(200324)更新一个大牛的个人项目pdown,大家可以收藏一下备用(为啥是备用呢,细心的小伙伴应该发现我把标题中的高速两个字去掉了). 先发项目地址:没错还是那个神奇的网站(大神奇人聚集的地方 ...
- 【PC工具】更新百度网盘高速下载工具——亿寻使用方法及注意事项
之前分享的工具和方法大部分都不好用了,我也就不保留了,有需要的朋友可以翻看之前的历史文章. 今天分享一个目前比较主流的下载工具"亿寻",可能很多朋友都用过了,这里我简单说一下使用方 ...
- php获取表单$_files,PHP中$_FILES的使用方法及注意事项说明
$_FILES:经由 HTTP POST 文件上传而提交至脚本的变量,类似于旧数组$HTTP_POST_FILES 数组(依然有效,但反对使用)详细信息可参阅 POST方法上传 $_FILES数组内容 ...
- 佳能g3800故障灯说明书_汽车仪表灯的使用方法以及注意事项
能够准确地识别仪表盘上的数据是每个驾驶员的必要能力,但是如今,汽车技术日新月异,大量先进技术已应用于我们的爱车上.汽车仪表盘上的指示灯和中控台上的指示灯按钮变得越来越繁杂,准确识别这些抽象按钮已不再是 ...
- 电脑安全注意事项_松下洗衣机维修方法及注意事项
阅读本文前,请您先点击上面的"蓝色字体",再点击"关注",这样您就可以继续免费收到文章了.每天都有分享,完全是免费订阅,请放心关注. 注:本文转载自网络,不代表 ...
- go面向对象编程:结构体struct详解、结构体实例的创建方式、结构体之间的转换(type取别名的使用)、方法的注意事项及与函数的区别
入门示例 package main import "fmt" //定义老师结构体,将老师中的各个属性 统一放入结构体中管理: type Teacher struct{//变量名字大 ...
- 动物之森服务器维护时间,动物之森怎么更改时间 动物森友会改时间方法及注意事项...
动物之森怎么更改时间?在动物之森中有些任务需要等待很长时间才能成功触发,为了节省时间很多玩家都会用穿越的方法投机取巧,也就是更改NS主机的时间.下面就是动物森友会改时间方法及注意事项了,大家一起来看看 ...
- linux gfs原理,Linux GFS 配置方法及注意事项
Linux GFS(Global File System)是实现为多个访问节点或者主机能同时读写的分布式文件系统. 现测试基于RedHat的GFS简单 配置方法及注意事项实验记录如下: 1.GFS ...
最新文章
- SVN中trunk、branch、tag区别
- HBNIS-crypto
- Intel 平台编程总结----缓存的优化
- Confluence 实现公司wiki【转】
- linux中网络怎么检查,如何在Linux中检查以太网?
- Android 应用开发(20)--- 定义自定义应用程序权限
- VB删除带子文件夹和文件的文件夹
- TortoiseSVN搭建本地版本库及简单操作使用
- Treap 树堆 容易实现的平衡树
- poj1054The Troublesome FrogDP
- 增强for循环(foreach解析)—带冒号的for循环
- 计算机硬盘大小一般都是整数,电脑硬盘怎么精准整数分区
- mysql有mdf文件和ldf文件吗_mdf与ldf文件格式
- 追本溯源,解密第一性原理(下)
- nuxt如何添加背景图片
- 单页双曲面 matlab,生成平面截单叶双曲面的gif动画的程序
- Pois-son blending
- 区块链项目如何开发?区块链APP和DAPP怎么做?
- 战地服务器名字不显示号码的电话软件,打电话显示虚拟号码的软件,教你打电话隐藏号码...
- 揭秘肖特基二极管损坏背后的秘密
热门文章
- 转:div中内容上下居中小结
- Docker 三剑客之 Docker Swarm
- 功能设计与交互设计的冲突和融合_邓昆
- 纯数学教程 Page 203 例XLI (2)
- spring mvc+myibatis项目大致框架-spring mvc wendang
- 将GridView数据导出到Excel实现
- 只能在执行Render() 的过程中调用 RegisterForEventValidation;
- linux 后台进程管理,Linux 后台进程管理利器 Supervisor
- 诺基亚n1支持java功能_关于诺基亚N1你必须要了解这10个问题!
- python邮件群发_Python操作Gmail@定时定向群发邮件