MapReduce 计算模式
声明:本文摘录自《大数据日知录——架构与算法》一书。
较常见的计算模式有4类,实际应用中大部分ETL任务都可以归结为这些计算模式或者变体。
1.求和模式
a.数值求和
比如我们熟悉的单词计数,即使该模式的一个应用。求最大最小值,求平均值皆属此类。
b.记录求和
非数值内容的累加,形成队列。比如将包含某个key的网页添加到一个列表当中。
2.过滤模式
不对数据进行转换,只是从大量数据中筛选。
a.简单过滤
这类应用不需要对数据进行聚合(原因不复杂),所以无需reduce阶段。
b.Top 10
和简单过滤的差异在于:简单过滤的条件判断只涉及当前记录,而Top k计算模式需要在记录之间进行比较,并获得全局最大的子集。
思路:map =>local top k =>reduce =>overall top k
3.组织数据模式
a.数据分片
重点在partitioner策略的设计上,通过改变partitioner来将相同标准的数据经过Shuffle过程放到一起,由同一个reducer 来输出。
问题来了,这该如何实现呢?
考虑到partitioner是可以自定义的(这TM不废话么),那么,我们可以在partitioner内部实现对数据的分析,然后将其输出到不同的partition中。
b.全局排序
可以直接利用内置排序过程,也就是说,mapper只需要将要排序的字段作为key,记录内容作为value输出即可。
reducer其实也不需要做额外的任务,因为sort过程已经排好序了。(有一个问题,假如我对排序算法不满意怎么办?一个办法是自定义key,也就是自定义一个WritableComparable接口的类,并且根据需求实现里面的compareTo方法)
如果有不止一个reducer怎么办?如果不做额外的处理,排序结果就会成为局部排序。
有办法:Partitioner,可以将处于不同区间的key放在不同的Partition,相同区间的Key放在同一Partition。
4.Join模式
a.Reduce-Side Join
这个过程对于笔者而言比较复杂,所以这个主题会耗费较多文字。
在选定外键之后,所有相同外键的数据分配到了同一个Reducer。需要注意的是如何区分来自不同数据集合的记录?一个显而易见的办法是在Mapper阶段动动手脚:给记录做标记,放在Value中。
然后,将reducer的Value list根据集合的不同整合成2个列表(或者哈希表,其实就是一个查询效率的问题,想怎么搞就怎么搞),然后再将这些数据进行Join。
多说一句:整个过程需要经过数轮磁盘的读写,shuffle阶段的网络传输,以及Reduce阶段的排序,所以计算效率比较低。(意思就是Mapper几乎什么事都没干,却因为IO的问题而导致时间效率低)
b.Map-Side Join
好了,效率低的解决办法来了;不过有前提条件:数据集合一个大一个小,并且小的那个完全可以放入内存。
读者朋友,读到这里你应该想明白Map-side Join是怎么回事了吧!
这个问题到此告一段落!
MapReduce 计算模式的更多相关文章
- 使用mapreduce计算环比的实例
最近做了一个小的mapreduce程序,主要目的是计算环比值最高的前5名,本来打算使用spark计算,可是本人目前spark还只是简单看了下,因此就先改用mapreduce计算了,今天和大家分享下这个 ...
- 《Kafka Stream》调研:一种轻量级流计算模式
原文链接:https://yq.aliyun.com/articles/58382 摘要: 流计算,已经有Storm.Spark,Samza,包括最近新起的Flink,Kafka为什么再自己做一套流计 ...
- 大数据技术之_19_Spark学习_05_Spark GraphX 应用解析 + Spark GraphX 概述、解析 + 计算模式 + Pregel API + 图算法参考代码 + PageRank 实例
第1章 Spark GraphX 概述1.1 什么是 Spark GraphX1.2 弹性分布式属性图1.3 运行图计算程序第2章 Spark GraphX 解析2.1 存储模式2.1.1 图存储模式 ...
- 使用Python的yield实现流计算模式
首先先提一下上一篇<如何猜出Y combinator>中用的方法太复杂了.其实在Lambda演算中实现递归的思想很简单,就是函数把自己作为第一个参数传入函数,然后后面就是简单的Lambda ...
- MapReduce计算模型
MapReduce计算模型 MapReduce两个重要角色:JobTracker和TaskTracker. MapReduce Job 每个任务初始化一个Job,没个Job划分为两个阶段:Map和 ...
- MapReduce——计算温度最大值 (基于全新2.2.0API)
MapReduce——计算温度最大值 (基于全新2.2.0API) deprecated: Job类的所有Constructors, 新的API用静态方法getInstance(conf)来去的Job ...
- PyCharm:2017.3版即将新增科学计算模式,预览版现在可以下载使用
编译:Lemon,原文作者:Ernst Haagsman 公众号:Python数据之道(ID:PyDataRoad) pycharm:2017.3版即将新增科学计算模式 在JetBrains将发布的新 ...
- MapReduce计算模型的优化
MapReduce 计算模型的优化涉及了方方面面的内容,但是主要集中在两个方面:一是计算性能方面的优化:二是I/O操作方面的优化.这其中,又包含六个方面的内容. 1.任务调度 任务调度是Hadoop中 ...
- (第4篇)hadoop之魂--mapreduce计算框架,让收集的数据产生价值
摘要: 通过前面的学习,大家已经了解了HDFS文件系统.有了数据,下一步就要分析计算这些数据,产生价值.接下来我们介绍Mapreduce计算框架,学习数据是怎样被利用的. 博主福利 给大家赠送一套ha ...
随机推荐
- SQL Server 2016将内置R语言
题记:随着大数据成为一个BuzzWord,和大数据相关的技术也变得越来越火热,其中就包括R语言.而据说SQL Server 2016将会内置R语言支持? R语言作为一个存在很久的语言,在大数据热炒之后 ...
- 常用模块:re ,shelve与xml模块
一 shelve模块: shelve模块比pickle模块简单,只有一个open函数,所以使用完之后要使用f.close关闭文件.返回类似字典的对象,可读可写;key必须为字符串,而值可以是pytho ...
- Hash的一点测试
哈希表的学习与测试 以前写的hash都是碰运气的hash,就是乘上质数取模的那种,这样不能保证不碰撞,所以今天先写上几个双hush和链表的hash,并比较一下他们的速度,测试的话用洛谷上的“字符串哈希 ...
- [Python] numpy.nonzero
numpy.nonzero(a) Return the indices of the elements that are non-zero. Returns a tuple of arrays, on ...
- python实现定时发送系列
1.发送邮件实现 2.定时任务实现 3.定时发送邮件实现 4.微信定时发送信息 详细源代码见:https://github.com/15387062910/timing_send 参考: 廖雪峰博客 ...
- Java 知识点(转)
1.servlet执行流程 客户端发出http请求,web服务器将请求转发到servlet容器,servlet容器解析url并根据web.xml找到相对应的servlet,并将request.resp ...
- UVA-572-搜索基础题
题意 GeoSurvComp 地理调查公司负责发现石油存储,这次GeoSurvComp公司在一个大型矩形区域上工作,它用一个网格分割地表,然后用可感知装备来单独分析每块小方格区域下是否包含石油,有油的 ...
- 64位win10系统无法安装.Net framework3.5的两种解决方法
参考网站: https://blog.csdn.net/zang141588761/article/details/52177290 在Windows10中,当我们安装某些软件的时候会提示“你的电脑上 ...
- zabbixzabbix
一,安装文档 https://www.zabbix.com/documentation/4.0/zh/manual/installation/requirements zabbix3.2.6安装 ...
- 20. orcle中统计一个字符串中某个字符的长度
例子1:统计一个字符串中“,”的个数: select lengthb(regexp_replace('[a,b,c,d,e,f]','[^,]',null)) as res from dual; 例 ...