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. 【Android】不弹root请求框检测手机是否root

    由于项目需要root安装软件,并且希望在合适的时候引导用户去开启root安装,故需要检测手机是否root. 最基本的判断如下,直接运行一个底层命令.(参考https://github.com/Trin ...

  2. Selenium2Library系列 keywords 之 _SelectElementKeywords

    # 公有方法 (1)get_list_items(self, locator)  返回labels集合 _get_select_list_options(self, select_list_or_lo ...

  3. 如何配置仿真器DM8127+SEED-XDS560v2PLUS和连接不上的问题的解决

    1 根据配置焊接JTAG电路转接板.我用的是14pin的. 2 安装仿真器驱动.安装完如下图 我安装的时候没有自动装上,第一次显示问号,后来手动的. 3 设置ccs工程 4 最后调试是这个样子 5 查 ...

  4. Android的主要组件

    (一)Activity(活动) 作用:提供可视化用户界面 只能通过setContentView(View)来显示指定组件 View组件是所有UI控件.容器控件的基类,View组件就是android应用 ...

  5. PostgreSQL的 fdw 跨库使用

    create extension postgres_fdw; ',dbname 'postgres'); create user mapping for android_market server s ...

  6. Microsoft Azure云计算第一步—试用帐户申请

    从本文开始,将会对Microsoft Azure云从Iaas, Paas, Saas三种类型的云应用通过文章进行介绍.千里之行,始于帐户:),如果大家需要申请免费试用帐户请参考本文. 对于直接付钱的壕 ...

  7. mysql基础知识(5)--视图

    视图 单词:view 什么是视图: 视图可以看作是一个“临时存储的数据所构成的表”(非真实表),其实本质上只是一个select语句.只是将该select语句(通常比较复杂)进行一个“包装”,并设定了一 ...

  8. 第二百零八天 how can I 坚持

    今天徐斌生日,生日快乐.买了两个小蛋糕,哈哈 还买了两条熊猫鱼.不知道鱼会不会冻死啊,买了加热器又不想用,看他们造化吧. LOL不错的游戏的. 睡觉,好冷.

  9. IDE Plug

    IDE Plug 使用 cnpack提供的IDE External Wizard Management 管理插件.添加插件.删除插件 Cnpack D:\Program Files (x86)\CnP ...

  10. HDU 2035 人见人爱A^B 分类: ACM 2015-06-22 23:54 9人阅读 评论(0) 收藏

    人见人爱A^B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...