MapReudce中常见join的方案
两表join在业务开发中是经常用到,了解了大数据join的原理,对于开发有很大的好处。
1、reduce side join
reduce side join是一种简单的join的方法,具体思想如下:
顾名思义就在reduce进行join,
在map阶段,map同时读取两文件file1,file2,为了区分key/value需要对两文件进行打标签,比如:tag=0 表示file1 tag=1 表示file2,
map阶段主要的任务就是对不同的数据打上不同的标签。
在reduce阶段,reduce函数会从file1,file2中获取相同key的value list,然后对相同key的file1和file2 进行join,即reduce 阶段进行实际的连接操作。
http://blog.csdn.net/huashetianzu/article/details/7819244
2、map side join
顾名思义就是在map端进行join,因为reduce side join 是非常低效的,需要在shuffle的过程中进行大量的数据传输,因为map阶段不能获取到所有需要的join的字段,即:同一个key对应的字段可能位于不同的map中。
map side join 一般是指需要一张大表,一张小表,小表可以直接放到内存中,这样我们可以将小表复制到各个map端进行join,每个map端都会存一份,一般在内存中(比如hash table)然后只扫描大表,对于大表中的每一条key/value,在小表中找到相同key的记录,如果有则输出。
http://blog.csdn.net/huashetianzu/article/details/7821674
3、semi join
semi join 也叫半连接,这个是从分布式数据库中借鉴过来的。产生的动机呢,主要是reduce side join 跨机器传输数据量非常大,这成了join的一个瓶颈,如果能在map端过滤掉不会参加join操作的数据,可以大大的节省了IO。
实现方法:先选取一张小表,假设是file1,把参与join的key抽取出来,保存在file3中,file3文件一般很小,可以放到内存中,这样把file3拷贝到每个taskTracker中,然后将file2中不在file3中的数据过滤掉,剩下的就与reduce side join相同。
http://blog.csdn.net/huashetianzu/article/details/7823326
4、reduce side join + BloomFilter
这个也是semi join的一个延伸,主要是有时sem join抽取出来的key在内存中依然存放不下,这时可以用BloomFilter来节省空间,
BloomFilter最常见的作用是:判断某个元素是否在一个集合里面,通过判断元素是否存在来过滤,
因而可将小表中的key保存到BloomFilter中,根据BloomFilter算法,在map阶段过滤大表,可能有一些不在小表中的记录没有被过滤掉(但是在小表中的记录一定不会过滤掉),这样只是增加了少量的IO。
http://blog.csdn.net/jiaomeng/article/details/1495500
http://baike.baidu.com/link?url=xLbNuk12FJSSlzLRmcWpQ1OaPbPYIvVUaackA6d_N77kYdyEqYVWUsgXbmo65iVotcnzODV_CvbuMQqbBtOFDLhfxccE4qUUWNTN589LrTK
MapReudce中常见join的方案的更多相关文章
- Redis 中常见的集群部署方案
Redis 的高可用集群 前言 几种常用的集群方案 主从集群模式 全量同步 增量同步 哨兵机制 什么是哨兵机制 如何保证选主的准确性 如何选主 选举主节点的规则 哨兵进行主节点切换 切片集群 Redi ...
- JavaScript中常见的数组操作函数及用法
JavaScript中常见的数组操作函数及用法 昨天写了个帖子,汇总了下常见的JavaScript中的字符串操作函数及用法.今天正好有时间,也去把JavaScript中常见的数组操作函数及用法总结一下 ...
- OpenStack安装部署管理中常见问题解决方法
一.网络问题-network 更多网络原理机制可以参考<OpenStack云平台的网络模式及其工作机制>. 1.1.控制节点与网络控制器区别 OpenStack平台中有两种类型的物理节点, ...
- PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等
页面导航: 首页 → 网络编程 → PHP编程 → php技巧 → 正文内容 PHP安全 PHP开发中常见的安全问题详解和解决方法(如Sql注入.CSRF.Xss.CC等) 作者: 字体:[增加 减小 ...
- js中常见的问题
js中常见的问题 原文链接 1.js获取select标签选中的值 原生js var obj = document.getElementByIdx_x(”testSelect”); //定位id var ...
- SQL Server中INNER JOIN与子查询IN的性能测试
这个月碰到几个人问我关于"SQL SERVER中INNER JOIN 与 IN两种写法的性能孰优孰劣?"这个问题.其实这个概括起来就是SQL Server中INNER JOIN与子 ...
- Python中常见字符串去除空格的方法总结
Python中常见字符串去除空格的方法总结 1:strip()方法,去除字符串开头或者结尾的空格>>> a = " a b c ">>> a.s ...
- SQL中常见语句
SQL中常见语句笔记: --替换字段中的回车符和换行符 ) ), '') --删除表命令 DROP TABLE [dbo].[MGoods_Test] --删除表中数据命令 DELETE FROM [ ...
- (转载)MySQL数据库的几种常见高可用方案
转自: https://yq.aliyun.com/articles/74454 随着人们对数据一致性的要求不断的提高,越来越多的方法被尝试用来解决分布式数据一致性的问题,如MySQL自身的优化. ...
随机推荐
- Win10/UWP新特性系列—电池报告
UWP中,新增了当节电模式开启时,App能获取到通知的API,通过响应电源条件的更改,比如咨询用户是否使用黑色背景等来帮助延长电池使用时间. 通过Windows.Devices.Power命名空间中的 ...
- mybatis 注意问题
<insert id="insertSelective" parameterType="com.hengxin.qianee.model.TalentUser&qu ...
- oracle 存储过程的写法
create or replace procedure Getyc is v_id VARCHAR2(36); v_date VARCHAR2(4); begin declare begi ...
- Java常用正则表达式验证工具类RegexUtils.java
import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexUtils{ /** * 正则表达式 ...
- Oracle的in/not in(x,...,null)
简述 cola in (x,y,z)等价于 cola=x or cola=y or cola=z cola not in (x,y,z)等价于 !(cola=x or cola=y or cola=z ...
- Struts2实现简单的在线人数统计
用Strust2框架的知识简单实现一个统计在线人数的问题. 1 搭建开发环境:(配置文件,jar包等问题) 2 index.jsp <%@ page language="java&qu ...
- Asp.net MVC 视图引擎
Asp.net MVC视图引擎有两种: 1.ASPX View Engine 这个做过WebForm的人都清楚 设计目标:一个用于呈现Web Form页面的输出的视图引擎. 2.Razor View ...
- [jQuery]html(),text(),val()方法的区别
1.HTML html():取得第一个匹配元素的html内容.这个函数不能用于XML文档.但可以用于XHTML文档 html(val):设置每一个匹配元素的html内容.这个函数不能用于XML文档.但 ...
- 伯克利包过滤(Berkeley Packet Filter,BPF)语言
libpcap支持一种功能非常强大的过滤语言——“伯克利包过滤”语法.使用BPF过滤规则,你可以确定该获取和检查哪些流量,忽略哪些流量.BPF让你能够通过比较第2.3.4层协议中各个数据字段值的方法对 ...
- java中Date与String的相互转化
1:大体思路 这种转换要用到java.text.SimpleDateFormat类 字符串转换成日期类型: 方法1: 也是最简单的方法 Date date=new Date("2008-04 ...