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. C# DataGridView的初始化

    动态添加列和行 方法一 通过手动添加Datatable,再绑定dataGridView DataTable dt = new DataTable();//建立个数据表 dt.Columns.Add(n ...

  2. Media Player 把光盘中的内容拷贝出来的方法

    http://jingyan.baidu.com/article/cb5d610529f0c1005c2fe0b4.html  这个链接是通过Media  Player 把光盘中的内容拷贝出来的方法h ...

  3. 九度 Online Judge 之《剑指 Offer》一书相关题目解答

    前段时间准备华为机试,正好之前看了一遍<剑指 Offer>,就在九度 Online Judge 上刷了书中的题目,使用的语言为 C++:只有3题没做,其他的都做了. 正如 Linus To ...

  4. Javascript实现局部刷新

    <div id="altContent">           要刷新的区域000000</div><input type="button& ...

  5. ansible控制windows的官方翻译

    Ansible控制windows 1.    Windows下如何工作 在ansible控制linux的时候,用的是ssh的方式,在windows中,使用的是power shell,在客户端机器上也是 ...

  6. mybatis系列-15-查询缓存

    15.1     什么是查询缓存 mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存. 一级缓存是SqlSession级别的缓存.在操作数据库时需要 ...

  7. font-size的探究

    整理网上的资料 font字体,用px,em,100%,rem?分什么情况考虑? 我们逐渐意识到,我们用px作为文字大小的单位,已经出现很多问题.最主要是体现在用户不能灵活的控制文字的大小. 对于大多数 ...

  8. tinyxml2简单使用

    引入头文件 <span style="font-size:18px;">#include "HelloWorldScene.h" #include ...

  9. 杭电ACM减花布条

    这是原题的地址 http://acm.hdu.edu.cn/showproblem.php?pid=2087 Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条 ...

  10. 从Mac的Finder中访问你的iCloud文档

    [从Mac的Finder中访问你的iCloud文档] 从OS X 10.7.2开始,iCloud就深入Mac当中,我们也可以在Finder中访问储存在iCloud中的文件,甚至当你拥有多台Mac的时候 ...