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是怎么回事了吧!

这个问题到此告一段落!

时间: 2024-09-30 21:58:14

MapReduce 计算模式的相关文章

使用mapreduce计算环比的实例

最近做了一个小的mapreduce程序,主要目的是计算环比值最高的前5名,本来打算使用spark计算,可是本人目前spark还只是简单看了下,因此就先改用mapreduce计算了,今天和大家分享下这个例子,也算是对自己写的程序的总结了. 首先解释下环比,例如我们要算本周的环比,那么计算方式就是本周的数据和上周数字的差值除以上周数值就是环比了,如果是月的环比就是本月和上月数据的差值除以上月数字就是本月环比了.不过本mapreduce实例不会直接算出比值,只是简单求出不同时间段数值的差值,最终环比结

典型大数据计算模式与系统

典型大数据计算模式 典型系统 大数据查询分析计算 HBase,Hive,Cassandra,Impala,Shark,Hana等 批处理计算 Hadoop MapReduce,Spark等 流式计算 Scribe,Flume,Storm,S4, Spark Steaming等 迭代计算 HaLoop,iMapReduce,Twister,Spark等 图计算 Pregel,Giraph,Trinity,PowerGraph,GraphX等 内存计算 Dremel,Hana,Spark等

大数据技术之_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 图存储模式2.1.2 GraphX 存储模式2.2 vertices.edges 以及 triplets2.2.1 vertices2.2.2 edges2.2.3 triplets2.3 图的构建2.3.1 构建图的方法2.3.2 构建图的过程2.4 计算模式2.4.1 BSP 计算模式2.4.2 图操作一

网络计算模式与比较

网络计算模式: 一.C/S模式(Client/Server,客户/服务器) 二.B/S模式(Browser/Server,浏览器/服务器) C/S模式 B/S模式 开发和维护成本 较高 较低 客户端负载 客户端需承载一定负载,可以减轻服务器负载 所有请求都需要经过服务器,对服务器要求较高 可移植性 较差,不同平台需要不同版本 较好,有浏览器就能访问 用户界面 设计者决定,定制 几乎相同 安全性 较好,协议自己定义 较差,开源协议

企业计算模式

第五节 企业计算模式 计算机应用系统中数据与应用(程序)的分布方式称为企业计算机应用系统的计算模式,有时也称为企业计算模式. 自世界上第一台计算机诞生以来, 计算机作为人类信息处理的工具已有半个多世纪了,在这个发展过程中计算机应用系统的模式发生了几次变革.计算机应用系统已经历了四种计算模式,它们分别是:单主机计算模式.分布式客户/服务器计算模式(Client/Server—C/S)和浏览器/服务器计算模式(Browser/Server—B/S) ,云计算模式.这几种计算模式的出现与计算机.网络及

网络计算模式

两种模式的比较分析:(B/S目前比较流行) 1.开发和维护成本 B/S模式开发和维护成本比较低,因为只需要维护Web服务器就可以了,C/S模式需要维护客户端和服务器(复杂度相同,工作量差不多的情况下) 2.客户端负载 B/S模式客户端负载比较重,很多客户端不需要服务器就解决了很多事情,C/S模式所以的服务都是要经过服务器进行处理,再返回 3.可移植性 B/S模式这方面更优越,只要有个浏览器就可以再不同平台上访问.C/S模式下需要适应不同的操作系统平台,很多客户端需要针对平台做单独的开发,比如QQ

MapReduce计算框架

MapReduce计算框架 一.MapReduce实现原理 图展示了MapReduce实现中的全部流程,处理步骤如下: 1.用户程序中的MapReduce函数库首先把输入文件分成M块(每块大小默认64M),在集群上执行处理程序,见序号1 2.主控程序master分配Map任务和Reduce任务给工作执行机器worker.见序号2 3.一个分配了Map任务的worker读取并处理输入数据块.从数据片段中解析出key/value键值对,然后把其传递给Map函数,由Map函数生成并输出中间key/va

hadoop之魂--mapreduce计算框架,让收集的数据产生价值 (第4篇)

  通过前面的学习,大家已经了解了HDFS文件系统.有了数据,下一步就要分析计算这些数据,产生价值.接下来我们介绍Mapreduce计算框架,学习数据是怎样被利用的. Mapreduce计算框架 如果将Hadoop比做一头大象,那么MapReduce就是那头大象的电脑.MapReduce是Hadoop核心编程模型.在Hadoop中,数据处理核心就是MapReduce程序设计模型. 本章内容: 1) MapReduce编程模型 2) MapReduce执行流程 3) MapReduce数据本地化

HDU1686 计算模式串匹配的次数

题目大意: 输入一个T,表示有T组测试数据: 每组测试数据包括一个字符串W,T,T长度大于W小于1000000,w长度小于10000,计算W匹配到T中成功的次数: 这题很明显要用KMP算法,不然很容易超时,但在使用kmp算法时也要注意,我第一次将匹配成功的位置得到后,循环进入kmp算法,从前一个匹配到的位置开始算起,但是超时了.后来问完学长之后,清楚了,没必要循环进入kmp,直接一次可以搞定,每次模式串匹配到末尾时,都将计数+1,然后根据next[m],重新得到j继续与原串进行匹配直到进行到原串