总结的MR中连接操作
1 reduce side join
在map端加上标记, 在reduce容器保存,然后作笛卡尔积
缺点: 有可能oom
2 map side join
2.1 利用内存和分布式缓存,也有oom风险
2.2 自己的想法,参考hive桶的思路,
第一次MR,将两个文件相同的方法分文件输出并打上标记,排序输出,尽可能分的比较均匀
第二次MR 改写输入方法,将相同标记的多个分片打包传给map, 改写读的方法,用数组或者列表保存文件流,利用多个文件多路归并思想,使整个大分片按照有序的方法传给map,
MAP方法中,保存当前的连接key, 然后用容器分标示保存连接key,每次有新的连接key进来,判断是否与上一个连接key相同,如果不同,则输出 容器的笛卡尔积, 否则则添加进容器
优点: 减少笛卡尔积,分片打包时,如果有个标示没有,整个分片都可以丢掉,减少判断
缺点: 如果连接key过多, 还是有oom风险.
改进思路,在文件读取时,根据文件读取相同标示的分片内容(首选文件小的),Map中保存, 读完再读取另外一个文件标示下的文件,如果连接key相同,则和容器中保存的值做连接输出,一直读到不同的key为止,继续连续读上一个标示的key
优点: 减少了一个容器来做笛卡尔积,只用保存小的标示文件,然后和大文件做笛卡尔积
缺点: 如果小文件单个key的数量很大, 还是会有oom风险
3 半连接
主要利用过滤,将要文件中要关联的字段抽取出来,保存成一个文件, 利用分布式缓存读入内存过滤,如果文件过大可以利用bloomfile, 可能牺牲了一点精确度,但是在reduce端还是会过滤
风险: 还是有oop风险
总结的MR中连接操作的更多相关文章
- python 连接操作数据库(一)
一.下面我们所说的就是连接mysql的应用: 1.其实在python中连接操作mysql的模块有多个,在这里我只给大家演示pymysql这一个模块(其实我是感觉它比较好用而已): pymysql是第三 ...
- php大力力 [024节]PHP中的字符串连接操作(2015-08-27)
2015-08-27 php大力力024.PHP中的字符串连接操作 PHP中的字符串连接操作 阅读:次 时间:2012-03-25 PHP字符串的连接的简单实例 时间:2013-12-30 很多 ...
- day18-事务与连接池 3.jdbc中事务操作介绍
那么我们都是通过程序操作数据库.所以要了解jdbc下怎样对事务操作.jdbc如何操作事务? 自动事务false那就不开了呗相当于开启事务. package cn.itcast.transaction; ...
- django 中连接mysql数据库的操作步骤
django中连接mysql数据库的操作步骤: 1 settings配置文件中 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mys ...
- 具体解释VB中连接access数据库的几种方法
在VB中,连接ACCESS数据库的方法主要有以下三种 使用ADO对象,通过编写代码訪问数据库 Connection 对象 ODBC数据源 使用ADO Data 控件高速创建数据库连接 有三种连接方法 ...
- python 连接操作数据库(二)
一.我们接着上期的博客继续对ORM框架进行补充,顺便把paramiko模块也给大家讲解一下: 1.ORM框架: 在连接操作数据库的第一个博客中也已经说了,sqlalchemy是一个ORM框架,总结就是 ...
- RxJava操作符(09-算术/聚合操作&连接操作)
转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51692493 本文出自:[openXu的博客] 目录: 算术聚合 Count Concat ...
- Asp.Net SignalR Hub类中的操作详解
Hub类中的操作 在服务端我们要通过Hub类做一系列操作,下面就说说我们都可以做什么操作 客户端的发送消息操作 调用所有的客户端的helloClient方法 Clients.All.helloClie ...
- 一起学Hadoop——实现两张表之间的连接操作
---恢复内容开始--- 之前我们都是学习使用MapReduce处理一张表的数据(一个文件可视为一张表,hive和关系型数据库Mysql.Oracle等都是将数据存储在文件中).但是我们经常会遇到处理 ...
随机推荐
- SEH结构
首先有几点问题 1.在后文中看到的PE的节中的配置信息表Load configuration是对SEH回调函数的注册,那么Exception Table是加载的什么信息. 2.什么时候走进系统异常,什 ...
- 深入理解JavaScript系列(8):S.O.L.I.D五大原则之里氏替换原则LSP
前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第3篇,里氏替换原则LSP(The Liskov Substitution Principle ). 英文原文:http ...
- CheckBoxList
CheckBoxList 控件基本用法 定义和用法 CheckBoxList 控件用来建立一个多选的复选框组. CheckBoxList 控件中的每个可选项由一个 ListItem 元素来定义! 提示 ...
- 操作系统-Interrupts
- Java日志框架解析及实战分析
转载自: https://zhuanlan.zhihu.com/p/24272450 https://zhuanlan.zhihu.com/p/24275518 作为Java程序员,幸运的是,Java ...
- 快速排序——Java实现
一.排序思想 快速排序是由冒泡排序改进而得到的,是一种分区交换排序方法.思想如下:一趟快速排序采用从两头向中间扫描的方法,同时交换与基准记录逆序的记录. 在待排序的N个记录中任取一个元素(通常取第一个 ...
- python的if语句
1.条件测试 (1)概念: 每条if语句的核心都是一个值为True或False的表达式,这种表达式被称为条件测试.Python 根据条件测试的值为True还是False来决定是否执行if语句中的代码. ...
- 人工智能(AI)
一.人工智能的核心——机器学习 人工智能是一个很大的圈子,但人工智能的基础是机器学习. 机器学习是什么? 其实就是人告诉机器想做什么事情,并且给它一堆数据让它模仿着去做. 机器学习需要什么? 算法.数 ...
- CSS垂直居中的四种方法
写在前面的话 最近在Stack Overflow上看到 一个不错的回答 ,以下是我对其的总结,分享给大家. 垂直居中的四种方法 ①基础的方法 设置父元素的line-height等于height,这种方 ...
- CSS实现文本周围插入符号
CSS实现文本周围插入符号的方案 本文要讨论的是如何在文本的周围插入图标,怎么样控制它们之间的位置关系,通过HTML结构合理性与CSS属性的使用来比较不同方案所实现效果的优缺点. 常见设计稿要求 在文 ...