现在MapReduce/Hadoop以及相关的数据处理技术非常热,因此我想在这里将MapReduce的优势汇总一下,将MapReduce与传统基于HPC集群的并行计算模型做一个简要比较,也算是对前一阵子所学的MapReduce知识做一个总结和梳理。
随着互联网数据量的不断增长,对处理数据能力的要求也变得越来越高。当计算量超出单机的处理能力极限时,采取并行计算是一种自然而然的解决之道。在MapReduce出现之前,已经有像MPI这样非常成熟的并行计算框架了,那么为什么Google还需要MapReduce,MapReduce相较于传统的并行计算框架有什么优势,这是本文关注的问题。
文章之初先给出一个传统并行计算框架与MapReduce的对比表格,然后一项项对其进行剖析。
MapReduce和HPC集群并行计算优劣对比
▲
在传统的并行计算中,计算资源通常展示为一台逻辑上统一的计算机。对于一个由多个刀片、SAN构成的HPC集群来说,展现给程序员的仍旧是一台计算机,只不过这台计算拥有为数众多的CPU,以及容量巨大的主存与磁盘。在物理上,计算资源与存储资源是两个相对分离的部分,数据从数据节点通过数据总线或者高速网络传输到达计算节点。对于数据量较小的计算密集型处理,这并不是问题。而对于数据密集型处理,计算节点与存储节点之间的I/O将成为整个系统的性能瓶颈。共享式架构造成数据集中放置,从而造成I/O传输瓶颈。此外,由于集群组件间耦合、依赖较紧密,集群容错性较差。
而实际上,当数据规模大的时候,数据会体现出一定的局部性特征,因此将数据统一存放、统一读出的做法并不是最佳的。 MapReduce致力于解决大规模数据处理的问题,因此在设计之初就考虑了数据的局部性原理,利用局部性原理将整个问题分而治之。MapReduce集群由普通PC机构成,为无共享式架构。在处理之前,将数据集分布至各个节点。处理时,每个节点就近读取本地存储的数据处理(map),将处理后的数据进行合并(combine)、排序(shuffle and sort)后再分发(至reduce节点),避免了大量数据的传输,提高了处理效率。无共享式架构的另一个好处是配合复制(replication)策略,集群可以具有良好的容错性,一部分节点的down机对集群的正常工作不会造成影响。
硬件/价格/扩展性
传统的HPC集群由高级硬件构成,十分昂贵,若想提高HPC集群的性能,通常采取纵向扩展的方式:即换用更快的CPU、增加刀片、增加内存、扩展磁盘等。但这种扩展方式不能支撑长期的计算扩展(很容易就到顶了)且升级费用昂贵。因此相对于MapReduce集群,HPC集群的扩展性较差。
MapReduce集群由普通PC机构成,普通PC机拥有更高的性价比,因此同等计算能力的集群,MapReduce集群的价格要低得多。不仅如此,MapReduce集群中的节点通过以太网进行连接,因而具有良好的横向扩展性,即可以通过添加PC机节点的方式提高处理能力。Yahoo!拥有世界上最大的Hadoop集群,包含4000多个节点(Google的 MapReduce集群规模应该更大,但好像没公布过具体数字,如有网友知情,还望不吝赐教)。
编程/学习难度
传统的并行计算模型都有着与多线程模型类似的逻辑,这种编程模型最大的问题是程序的行为难以控制。为了保证正确的执行结果,需要小心控制共享资源的访问,并由此发展出了互斥量、信号量、锁等一系列同步技术,也带来了诸如争抢、饥饿、死锁等问题。程序员在使用传统并行计算模型编程时,不仅仅要考虑要做的事情(即“what to do”:使用并行模型描述需要解决的问题),还要考虑程序执行的细节(即“how to do”,程序执行中的诸多同步、通信问题),这使得并行编程十分困难。已有的编程模型,例如MPI、OpenCL、CUDA也只是在较低的层次做了封装,需要处理的程序执行细节依然很多。
MapReduce则做了更多处理:MapReduce不仅包含编程模型,还提供一个运行时环境,用以执行MapReduce程序,并行程序执行的诸多细节,如分发、合并、同步、监测等功能均交由执行框架负责。使用MapReduce,程序员只需要考虑如何使用MapReduce模型描述问题(what),而无需操心程序是如何执行的(how),这使得MapReduce易学易用。
适用场景
说了这么多MapReduce的好话,MapReduce是万金油吗?
答案是否定的,无论什么时候,都不应该忘记MapReduce的设计初衷:解决大规模、非实时数据处理问题。大规模决定数据有局部性特性可利用(从而可以划分)、可以批处理;非实时代表响应时间可以较长,有充分的时间执行程序。比如下面的几个操作:
1. 更新搜索引擎排序(在整个web图上执行PageRank算法)
2. 计算推荐(推荐结果并不需要实时更新,因此设定一个固定时间点周期性更新)
MapReduce的诞生有它的时代背景:随着web的发展,尤其是SNS和物联网的发展,web上各种由用户、传感器产生数据量呈现出爆炸式的增长。数据存起来只能是死数据,唯有经过分析处理,才能得到数据中蕴含的信息,进而从信息中总结知识。因此数据重要,处理数据的能力同样重要。传统的基于HPC集群的并行计算已经无法满足飞速增长的数据处理需要,因此基于普通PC的低成本、高性能、高可扩展性、高可靠性的MapReduce应运而生。
分享到:
相关推荐
在暨南大学的并行计算实验室中,MapReduce的研究是其核心研究方向之一,旨在深入理解并优化这种计算模式,以适应不断增长的数据处理需求。 并行计算是指同时使用多个处理器或计算机来解决计算问题,以提高计算效率...
《基于MapReduce模型的并行粒子群分簇算法研究》这篇论文探讨了在大数据环境下,如何利用并行计算和MapReduce模型来优化粒子群优化算法(PSO)以解决大规模数据集的分簇问题。粒子群优化算法是一种模拟群体智能行为...
在并行计算架构与模式课程中,我们将学习到各种并行计算架构和模式,包括Cache、RAID、Parallel Storage、多核架构、流水线、并行存储器、指令系统、云计算等。这些知识点都是并行计算领域中的基础知识,在学习和...
综上所述,基于边缘计算与MapReduce的智能量测终端数据处理方法,不仅可以有效解决电力物联网中因数据量巨大而引起的网络拥塞和操作延迟问题,还可以通过合理配置和安全策略,确保数据处理的高效性和安全性。...
MapReduce模型能够有效解决这些问题,把并行计算任务中繁杂的工作封装起来,使得具体实现和业务逻辑分离,并对用户和应用程序透明。 MapReduce模型由Google公司开发设计,其核心思想是简化大规模数据集处理过程中的...
【基于MapReduce和GPU双重并行计算的云计算模型】 云计算是一种分布式计算模型,它通过互联网将大量计算资源池化,以提供按需服务的方式。在处理大规模数据处理任务时,传统的CPU并行计算可能无法满足高效能计算的...
基于MapReduce模型的并行计算平台设计
本文将对这两个主题进行深入探讨,特别关注Hadoop集群和MPI(Message Passing Interface)并行计算的使用和介绍。 1. 分布式系统概述 1.1 分布式系统的概念 分布式系统是由多台独立的计算机节点通过网络连接,共同...
并行计算是现代计算机科学中的一个重要领域,尤其是在大数据处理和高性能计算中不可或缺。Java作为一种广泛使用的编程语言,具有跨平台的特性,使得它在并行计算领域也占据了一席之地。下面将详细介绍Java并行计算的...
### 并行计算与数据挖掘的关键知识点 #### 一、并行计算概述 并行计算是一种计算模式,它...随着技术的不断进步和发展,未来的并行计算与数据挖掘技术将会更加成熟和完善,为各行各业提供更加强大的数据处理能力。
基于MapReduce框架的集群系统,提出了1种新 的计算模型用于大规模图形的3-clique计算,来实现图挖掘. 计算的基本步骤是:首先获取每个节点的第1跳信息,然 后是第2跳信息,最后得到所有基于该节点的3-clique. 该计算模型...
MapReduce是一种分布式计算框架,由Google提出,适用于大规模数据集的并行处理。其核心思想是将复杂的计算任务拆分成两个主要阶段:Map和Reduce,以及一个可选的Combiner阶段。Map阶段将原始数据切分成键值对,然后...
并行计算是现代计算机科学中的一个重要领域,它涉及到在多处理器、多核心或者分布式系统上同时执行多个计算任务,以提高整体的计算效率和解决问题的速度。在这个压缩包中,我们很显然关注的是与并行计算相关的源代码...
分布式与并行计算是计算机科学中的重要领域,它涉及到如何利用多台计算机协同处理大量数据和执行复杂任务。本资源包含“分布式与并行计算”的课后答案和部分讲义,旨在帮助学习者深入理解这一领域的核心概念和技术。...