`
gaojingsong
  • 浏览: 1202945 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【Hadoop核心之MapReduce介绍】

阅读更多

1、MapReduce

MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。

 

2、MapReduce分布可靠

MapReduce通过把对数据集的大规模操作分发给网络上的每个节点实现可靠性;每个节点会周期性的返回它所完成的工作和最新的状态。如果一个节点保持沉默超过一个预设的时间间隔,主节点(类同Google File System中的主服务器)记录下这个节点状态为死亡,并把分配给这个节点的数据发到别的节点。每个操作使用命名文件的原子操作以确保不会发生并行线程间的冲突;当文件被改名的时候,系统可能会把他们复制到任务名以外的另一个名字上去。(避免副作用)。

化简操作工作方式与之类似,但是由于化简操作的可并行性相对较差,主节点会尽量把化简操作只分配在一个节点上,或者离需要操作的数据尽可能近的节点上;这个特性可以满足Google的需求,因为他们有足够的带宽,他们的内部网络没有那么多的机器

 

 

3、MapReduce主要功能

MapReduce提供了以下的主要功能:

1)数据划分和计算任务调度:

系统自动将一个作业(Job)待处理的大数据划分为很多个数据块,每个数据块对应于一个计算任务(Task),并自动 调度计算节点来处理相应的数据块。作业和任务调度功能主要负责分配和调度计算节点(Map节点或Reduce节点),同时负责监控这些节点的执行状态,并 负责Map节点执行的同步控制。

2)数据/代码互定位:

为了减少数据通信,一个基本原则是本地化数据处理,即一个计算节点尽可能处理其本地磁盘上所分布存储的数据,这实现了代码向 数据的迁移;当无法进行这种本地化数据处理时,再寻找其他可用节点并将数据从网络上传送给该节点(数据向代码迁移),但将尽可能从数据所在的本地机架上寻 找可用节点以减少通信延迟。

3)系统优化:

为了减少数据通信开销,中间结果数据进入Reduce节点前会进行一定的合并处理;一个Reduce节点所处理的数据可能会来自多个 Map节点,为了避免Reduce计算阶段发生数据相关性,Map节点输出的中间结果需使用一定的策略进行适当的划分处理,保证相关性数据发送到同一个 Reduce节点;此外,系统还进行一些计算性能优化处理,如对最慢的计算任务采用多备份执行、选最快完成者作为结果。

4)出错检测和恢复:

以低端商用服务器构成的大规模MapReduce计算集群中,节点硬件(主机、磁盘、内存等)出错和软件出错是常态,因此 MapReduce需要能检测并隔离出错节点,并调度分配新的节点接管出错节点的计算任务。同时,系统还将维护数据存储的可靠性,用多备份冗余存储机制提 高数据存储的可靠性,并能及时检测和恢复出错的数据。

 

 

 

 

 

4、MapReduce主要技术特征

MapReduce设计上具有以下主要的技术特征:

1)向“外”横向扩展,而非向“上”纵向扩展

即MapReduce集群的构建完全选用价格便宜、易于扩展的低端商用服务器,而非价格昂贵、不易扩展的高端服务器。

对于大规模数据处理,由于有大 量数据存储需要,显而易见,基于低端服务器的集群远比基于高端服务器的集群优越,这就是为什么MapReduce并行计算集群会基于低端服务器实现的原 因。

2)失效被认为是常态

MapReduce集群中使用大量的低端服务器,因此,节点硬件失效和软件出错是常态,因而一个良好设计、具有高容错性的并行计算系统不能因为节点 失效而影响计算服务的质量,任何节点失效都不应当导致结果的不一致或不确定性;任何一个节点失效时,其他节点要能够无缝接管失效节点的计算任务;当失效节 点恢复后应能自动无缝加入集群,而不需要管理员人工进行系统配置。

MapReduce并行计算软件框架使用了多种有效的错误检测和恢复机制,如节点自动重 启技术,使集群和计算框架具有对付节点失效的健壮性,能有效处理失效节点的检测和恢复。

3)把处理向数据迁移

传统高性能计算系统通常有很多处理器节点与一些外存储器节点相连,如用存储区域网络(Storage Area,SAN Network)连接的磁盘阵列,因此,大规模数据处理时外存文件数据I/O访问会成为一个制约系统性能的瓶颈。

为了减少大规模数据并行计算系统中的数据 通信开销,代之以把数据传送到处理节点(数据向处理器或代码迁移),应当考虑将处理向数据靠拢和迁移。MapReduce采用了数据/代码互定位的技术方法,计算节点将首先尽量负责计算其本地存储的数据,以发挥数据本地化特点,仅当节点无法处理本地数据时,再采用就近原则寻找其他可用计算节点,并把数据传送到该可用计算节点。

4)顺序处理数据、避免随机访问数据

大规模数据处理的特点决定了大量的数据记录难以全部存放在内存,而通常只能放在外存中进行处理。由于磁盘的顺序访问要远比随机访问快得多,因此 MapReduce主要设计为面向顺序式大规模数据的磁盘访问处理。

为了实现面向大数据集批处理的高吞吐量的并行处理,MapReduce可以利用集群中 的大量数据存储节点同时访问数据,以此利用分布集群中大量节点上的磁盘集合提供高带宽的数据访问和传输。

5)为应用开发者隐藏系统层细节

软件工程实践指南中,专业程序员认为之所以写程序困难,是因为程序员需要记住太多的编程细节(从变量名到复杂算法的边界情况处理),这对大脑记忆是 一个巨大的认知负担,需要高度集中注意力;而并行程序编写有更多困难,如需要考虑多线程中诸如同步等复杂繁琐的细节。由于并发执行中的不可预测性,程序的 调试查错也十分困难;而且,大规模数据处理时程序员需要考虑诸如数据分布存储管理、数据分发、数据通信和同步、计算结果收集等诸多细节问题。

MapReduce提供了一种抽象机制将程序员与系统层细节隔离开来,程序员仅需描述需要计算什么(What to compute),而具体怎么去计算(How to compute)就交由系统的执行框架处理,这样程序员可从系统层细节中解放出来,而致力于其应用本身计算问题的算法设计。

6)平滑无缝的可扩展性

这里指出的可扩展性主要包括两层意义上的扩展性:数据扩展和系统规模扩展性。

理想的软件算法应当能随着数据规模的扩大而表现出持续的有效性,性能上的下降程度应与数据规模扩大的倍数相当;在集群规模上,要求算法的计算性能应能随着节点数的增加保持接近线性程度的增长。绝大多数现有的单机算法都达不到 以上理想的要求;把中间结果数据维护在内存中的单机算法在大规模数据处理时很快失效;从单机到基于大规模集群的并行计算从根本上需要完全不同的算法设计。奇妙的是,MapReduce在很多情形下能实现以上理想的扩展性特征。

多项研究发现,对于很多计算问题,基于MapReduce的计算性能可随节点数目增长保持近似于线性的增长。

0
1
分享到:
评论

相关推荐

    大数据Hadoop核心之MapReduce详解

    大数据Hadoop核心之MapReduce详解 MapReduce是Hadoop核心模块之一,作为一个分布式运算程序的编程框架,用于用户开发基于Hadoop的数据分析应用。MapReduce的核心功能是将用户编写的业务逻辑代码和自带默认组件整合...

    mapred.zip_hadoop_hadoop mapreduce_mapReduce

    MapReduce的核心理念是将大规模数据处理任务分解为两个主要阶段:Map(映射)和Reduce(化简)。在Map阶段,原始数据被分割成多个小块,并分配到集群的不同节点上进行并行处理。每个节点上的Map任务会独立处理其分到...

    Hadoop mapreduce实现wordcount

    MapReduce 是 Apache Hadoop 的核心组件之一,它为大数据处理提供了一个分布式计算框架。WordCount 是 MapReduce 框架中经典的入门示例,它统计文本文件中每个单词出现的次数。在这个案例中,我们将深入探讨如何在 ...

    基于 Hadoop 平台,使用 MapReduce 编程,统计NBA球员五项数据.zip

    在这个项目“基于 Hadoop 平台,使用 MapReduce 编程,统计NBA球员五项数据”中,我们将深入探讨如何利用 Hadoop 的核心组件 MapReduce 对 NBA 球员的数据进行分析。 MapReduce 是一种编程模型,用于大规模数据集...

    java操作hadoop之mapreduce计算整数的最大值和最小值实战源码

    在大数据处理领域,Hadoop是不可或缺的一个开源框架,它...通过这个实例,你可以深入理解MapReduce的核心机制,并将其应用到更复杂的数据处理任务中。记得在实际运行时,将输入和输出路径替换为实际的文件系统路径。

    大数据 hadoop mapreduce 词频统计

    Hadoop的核心组件包括HDFS(Hadoop Distributed File System)和MapReduce,这两个组件共同为大数据处理提供了强大的支持。 MapReduce是一种分布式计算模型,由Google提出,Hadoop对其进行了实现。在MapReduce中,...

    尚硅谷大数据技术之Hadoop(MapReduce)1

    【尚硅谷大数据技术之Hadoop(MapReduce)1】深入解析MapReduce MapReduce是Google提出的一种用于处理和生成大规模数据集的编程模型,被广泛应用于大数据处理领域。Hadoop将其作为核心组件,实现了分布式计算的功能...

    Hadoop MapReduce Cookbook 源码

    MapReduce是大数据处理领域中的核心组件,尤其在处理大规模分布式数据集时,它的重要性不言而喻。本书以实例驱动的方式,将复杂的理论知识转化为可操作的代码,使学习过程更加生动有趣。 首先,我们要理解MapReduce...

    hadoop学习本地win测试mapreduce程序,所要用到的环境软件.rar

    Hadoop的核心由两个主要部分组成:Hadoop Distributed File System (HDFS) 和 MapReduce。HDFS提供高容错性的分布式文件存储,而MapReduce则用于并行处理这些数据。 2. MapReduce:MapReduce是一种编程模型,用于大...

    Hadoop_MapReduce教程.doc

    MapReduce的核心思想是将大问题分解为小部分,通过map阶段的并行处理,然后在reduce阶段进行聚合,从而实现高效的数据处理。 1. **Map阶段**: 在Map阶段,输入数据集被分割成多个块,每个块分配给集群中的一个...

    Hadoop集群配置及MapReduce开发手册

    MapReduce是Hadoop的核心计算框架,手册将深入讲解其工作原理。Map阶段是数据的预处理,将原始输入数据转化为键值对;Reduce阶段则对Map阶段的结果进行聚合,产出最终结果。MapReduce的编程模型允许开发者用简单的...

    Hadoop MapReduce实战手册(完整版)

    MapReduce是Hadoop生态系统中的核心组件之一,用于处理和生成大规模数据集。该书旨在帮助读者理解并掌握如何使用MapReduce解决实际的大数据问题。 MapReduce的核心理念是将复杂的分布式计算任务分解为两个主要阶段...

    03-Hadoop-MapReduce.docx

    MapReduce是Hadoop生态系统中的核心组件之一,主要用于处理和生成大规模数据集。它的设计目标是简化分布式计算,使得开发者能够专注于编写业务逻辑,而无需过多关注底层分布式系统的复杂性。 **1. MapReduce定义** ...

    Hadoop技术-MapReduce简介.pptx

    MapReduce是Google在2004年提出的一种分布式计算模型,后来被Apache Hadoop项目采纳并发展成为一种广泛应用于大数据处理的关键技术。Hadoop技术,尤其是MapReduce,为大规模数据处理提供了一种高效、可扩展且容错性...

    hadoop eclipse mapreduce 下开发所有需要用到的 JAR 包

    4. **hadoop-mapreduce-client-core.jar**:MapReduce客户端的核心库,包含Job提交和监控的类。 5. **hadoop-streaming.jar**:这个库支持使用外部工具(如Python或Perl)作为Mapper和Reducer。 6. **hadoop-yarn-...

    Hadoop大数据平台之谷歌MapReduce

    Hadoop框架的核心组件是HDFS(Hadoop Distributed File System)和MapReduce编程模型。HDFS提供了高吞吐量的数据访问,并且能够应对硬件故障,而MapReduce编程模型则在Hadoop平台上实现了谷歌MapReduce模型的所有...

Global site tag (gtag.js) - Google Analytics