赞
踩
MapReduce 是一个使用简单的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错式并行处理TB级别的数据集。
MapReduce是一个并行程序的计算模型与方法
MapReduce是一个并行程序运行的软件框架
MapReduce是一个基于集群的高性能并行计算平台
MapReduce对大数据并行处理采用分而治之的设计思想。
如果一个大文件可以分为具有同样计算过程的多个数据块,并且这些数据块之间不存在数据依赖关系,那么提高处理速度的最好办法就是采用分而治之的策略对数据进行并行化计算。
MapReduce就是采用这种分而治之的设计思想,对相互间不具有或有较少数据依赖关系的大数据,用一定的数据划分方法对数据进行分片,然后将每个数据分片交由一个任务去处理,最后汇总所有任务的处理结果。简单来讲,MapReduce就是“任务的分解与结果的汇总”,其过程如下图:
MapReduce把函数式编程思想构建成抽象模型——Map和Reduce。MapReduce借鉴Lisp语言中的函数式编程思想定义了Map和Reduce两个抽象类,程序员只需要实现这两个抽象类,然后根据不同的业务逻辑实现具体的Map函数和Reduce函数即可快速完成并行化程序的编写。
例如,一个Web访问日志文件由大量的重复性访问日志构成,对这种顺序式数据元素或记录,通常也采用顺序式扫描的方式来处理。
典型的顺序式大数据处理的过程和特征如图所示:
MapReduce将以上处理过程抽象为两个基本操作,把前两步抽象为Map操作,把后两步抽象为Reduce操作。Map操作主要负责对一组数据记录进行某种重复处理,而Reduce操作主要负责对Map操作生成的中间结果进行进一步的结果整理和输出。以这种方式,MapReduce为大数据处理过程中的主要处理操作提供了一种抽象机制。
一般情况下,并行计算方法缺少统一的计算框架支持,因此程序员就需要考虑数据的存储、划分、分发、借过收集、错误恢复等诸多细节问题。
MapReduce 提供统一计算框架的主要目标是实现自动并行化计算,为程序员隐藏系统层面的细节。程序员只需要关注具体业务和算法本身即可,而不需要关注其他系统层面的处理的细节。该框架负责自动完成以下系统底层相关的处理。
计算任务的自动划分和调度。
数据的自动化分布存储和划分。
处理数据与计算任务的同步。
结果数据的收集整理,如排序,合并,分区等。
系统通信、负载均衡、计算性能优化。
处理系统节点出错检测和失效恢复。
MapReduce易于编程
MapReduce通过一些简单接口的实现就可以完成一个分布式程序的编写,而且这个分布式程序可以运行在由大量廉价服务器组成的集群上。也就是说,写一个分布式程序跟写一个简单的串行程序一模一样。正是这个使用简单的特点使得MapReduce编程变得越来越流行。
良好的扩展性
当计算资源不能得到满足时,可以通过简单地增加及机器数量来扩展集群的计算能力。这跟HDFS通过增加机器扩展集群存储能力的道理一样。
高容错性
MapReduce设计的初衷是使程序能够部署在廉价的商用服务器上,这就要求它具有很高的容错性。如果其中一个节点挂了,它会将上面的计算任务转移到另一个正常的节点上运行,不会造成任务运行失败。而且这个过程不需要人工参与,完全是Hadoop内部完成。
适合PB级以上数据集的离线处理
MapReduce适合对海量数据进行离线处理,数据量越大越能提现MapReduce的优越性。因为MapReduce作业启动速度慢且耗资源,所以处理小规模数据集的效率比较低。
不适合实时计算
MapReduce无法像MySQL一样在毫秒或秒级内返回结果,所以MapReduce并不适合对数据进行实时处理。
不适合流式计算
流式计算的输入数据是动态的,而MapReduce的输入数据集是静态的,不能动态变化,因为MapReduce自身的设计特点决定了数据源必须是静态的。
不适合DAG计算
在多个应用程序之间存在依赖关系的场景下,如果后一个应用程序的输入来自前一个应用程序的输出,此时MapReduce并不是不能处理,而是这种情况下每个MapReduce作业的输出结果都会写入到磁盘,会造成大量的磁盘IO,导致性能非常低下。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。