Google工程师将MapReduce定义为一般的数据处理流程。一直以来不能完全理解MapReduce的真义,为什么MapReduce可以“一般”?

最近在研究Spark,抛开Spark核心的内存计算,这里只关心Spark做了什么。在Spark上的所有工作都是围绕数据集进行,包括创建新的数据集、对数据集的转换、对数据集的归约。对于实际应用中的数据处理流程,Spark的这些似乎足够了,足够形成一套一般的数据处理流程。的确,Spark以数据集为操作对象,而可以不论数据集中数据的类型——很朴素的思想!

那么MapReduce呢?MapReduce是否应当被抛弃?在基于Hadoop的实时查询问题上,Hadoop的MapReduce框架也因其效率低下而饱受诟病。对于这个问题我想说的是,这丝毫不是MapReduce自身的问题,也不应全是Hadoop的MapReduce框架的问题,而更主要的是像Hive这类应用不当使用MapReduce的问题。MapReduce无辜地说:“我只对单轮MapReduce处理流程负责,你应当慎重考虑MapReduce处理流程的数据来源和数据去向。”

现在来读读MapReduce的哲学。现实世界的数据是多样的,这些数据在进入信息系统处理之前,我们无法确定哪些数据对于我们的数据查询或分析任务有用或无用,我们只能将所有能够收集到的数据以最原始的形式存储下来。接下来就是MapReduce施展神威的时刻。MapReduce第一步,Map:将数据归类,为每个数据打上一个标明数据属于哪个主题的标签——Key或Key的一部分。经过Map过程,无用数据被过滤,异构数据被统一表示,并且数据按主题分好组。下一步如果要查询或分析特定主题的数据,可以按主题取一组或多组数据。MapReduce第二步,Reduce:将数据归约,在选定的数据上实施查询或分析动作,输出查询或分析结果。Reduce过程可以做很多事情,可以做各类事情,包括递归发起新的MapReduce处理流程。只要还没有产生最终的查询或分析结果,就尽可能不要从Reduce过程返回到用户。看看Hive做了什么,Hive将一个SQL查询命令翻译成多个串行的MapReduce处理流程,难道不能在一个MapReduce处理流程的Reduce过程中完成所有工作吗?Hive的失败在于把MapReduce当成了工具而不是指导思想——世俗化了!

MapReduce与Spark,二者并不排斥,而完全可能很好地结合。我个人的想法是:在MapReduce的Reduce过程中使用Spark完成需要对数据集进行多次迭代才能得到结果的任务,如SQL查询。

理解MapReduce哲学的更多相关文章

  1. MapReduce剖析笔记之一:从WordCount理解MapReduce的几个阶段

    WordCount是一个入门的MapReduce程序(从src\examples\org\apache\hadoop\examples粘贴过来的): package org.apache.hadoop ...

  2. 理解MapReduce

    理解MapReduce Hadoop的MapReduce过程具有如下形式:           1) map: (K1, V1) => list(K2, V2)          2) redu ...

  3. 彻底理解MapReduce shuffle过程原理

    彻底理解MapReduce shuffle过程原理 MapReduce的Shuffle过程介绍 Shuffle的本义是洗牌.混洗,把一组有一定规则的数据尽量转换成一组无规则的数据,越随机越好.MapR ...

  4. 2本Hadoop技术内幕电子书百度网盘下载:深入理解MapReduce架构设计与实现原理、深入解析Hadoop Common和HDFS架构设计与实现原理

    这是我收集的两本关于Hadoop的书,高清PDF版,在此和大家分享: 1.<Hadoop技术内幕:深入理解MapReduce架构设计与实现原理>董西成 著  机械工业出版社2013年5月出 ...

  5. hadoop2.2编程:从default mapreduce program 来理解mapreduce

    下面写一个default mapreduce 的程序: import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapr ...

  6. 实例理解mapreduce任务的串行运行过程

    一.准备: eclipse,hadoop集群 注意:为了方便测试和修改,我用的是 windows 连接hadoop集群,这样在windows 下直接就能够执行 mapreduce 任务,方便程序调试. ...

  7. 大数据技术 - 通俗理解MapReduce之WordCount(三)

    上一章我们编写了简单的 MapReduce 程序,掌握这些就能编写大多数数据处理的代码.但是 MapReduce 框架提供给用户的能力并不止如此,本章我们仍然以上一章 word count 为例,继续 ...

  8. 大数据技术 - 通俗理解MapReduce之WordCount(二)

    上一章我们搭建了分布式的 Hadoop 集群.本章我们介绍 Hadoop 框架中的一个核心模块 - MapReduce.MapReduce 是并行计算模块,顾名思义,它包含两个主要的阶段,map 阶段 ...

  9. 深入理解MapReduce的架构及原理

    1. MapReduce 定义 Hadoop 中的 MapReduce是一个使用简单的软件框架.基于它写出来的应用程序能够执行在由上千个商用机器组成的大型集群上,并以一种可靠容错式并行处理TB级别的数 ...

随机推荐

  1. T-SQL:SQL Server-SQL语句大全经典

    ylbtech-SQL Server-Doc-Help:SQL Server-SQL语句大全经典 SQL Server 流程控制中的 While 语句. 1,SQL语句大全经典返回顶部 .说明:创建数 ...

  2. head 命令

    head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾. 1.命令格式: hea ...

  3. <转>安卓应用测试checklist

    启动: 1. 启动入口:桌面正常启动,最近运行启动,所有程序列表中启动,锁屏快捷启动 2. 其他入口:从其他程序开启应用,从外部以文件形式打开应用(如果有) 3. 退回:从其他程序退回时回到被测应用, ...

  4. 我的window平台下的软件

    SocksCap64-Portable-3.0(配合google drive 使用) ShadowsocksR-win-3.7.4 dropbox xx-net chrome switchyomega ...

  5. Eclipse安装配置PyDev插件

    Eclipse安装配置PyDev插件 关于PyDev PyDev是一个功能强大的 Eclipse插件,使用户可用 Eclipse 来进行 Python 应用程序的开发和调试.PyDev 插件的出现方便 ...

  6. margin四个元素的顺序

    如果margin给的是四个值比如:margin:0px 0px 0px 0px;代表:margin: top right bottom left代表从上右下左,顺时针方向.如果margin给的是三个值 ...

  7. 浅谈jquery选择器

    首先来说说jquery选择器的优势: 1.简洁的写法  2.支持css1.0到3.0选择器 3.完善的处理机制. 再来说说分类: jquery选择器分为基本选择器.层次选择器.属性选择器.基本过滤选择 ...

  8. <javascript高级程序设计>笔记

    1.要讲一个值转换成其对应的Boolean类型 ,可以调用转型函数Boolean(). var message=“hello world!”; var messageAsBoolean=Boolean ...

  9. HP ILO2 使用详细教程

    iLO是Intergrated Light-Out的缩写,是惠普特有的远程管理功能,目前最新的版本是iLO2.通过iLO2可以实现硬件级别的服务器远程管理,包括开关机.重启.服务器状态的监控.虚拟KV ...

  10. 实体框架 (EF) 入门 => 二、在全新的数据库中使用 Code First

    学习资料:http://msdn.microsoft.com/zh-cn/data/jj193542 视频建立的控制台应用程序,我在这里使用MVC. 一.非常有磁性的,非常优雅 很喜欢看这个人的视频, ...