`
langyu
  • 浏览: 888245 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

扩展MapReduce架构的一种尝试

阅读更多

        假设有这样一个游戏,一个人来出加减乘除的题目给很多小朋友来做,对每一个小朋友,给他出一道题目,然后让他算好后给你报告答案,你再给他出一道题目,周而复始如此。如果有十个小朋友在算,还可以欣赏小朋友抓耳挠腮的样子;如果有一百个小朋友,每个人都在争着表现,叫嚷着让出题,这个人肯定不堪重负;如果有成千上万个小朋友呢?这个人疯了。

        面对这样的场景,学生时的经验是不断地改进和优化算法;而工作以后的经验是再拽的算法也难以抵挡海量的数据或任务,主要还是增加资源,其次才是优化算法,两者可并行。小朋友越多,相应地增加出题人的数量,也可以缓解每个人的压力。

        与这种场景类似,MapReduce框架也面临类似的问题。如下图:





        越来越多的task tracker会让job tracker很有压力,以至于task tracker有很多时,job tracker不能及时响应请求,很多task tracker就空闲着资源,等待job tracker的response。Job tracker的压力与task tracker的资源浪费问题导致整个集群难于扩展,对外提供服务的能力也相当下降很多。当前Yahoo也受此困扰,正酝酿重构MapReduce架构。我没从这个架构看出对现有问题的改善之处,所以自己来试着分析下解决方法。

        回头来看模拟场景,如果把小朋友按班分,每个班都有一位老师。每位老师从出题人那里得到很多题目,然后让自己班的小朋友来做。这样,出题人的压力在于老师的数量,老师的压力在于班里小朋友的数量。以前小朋友数量增加带给出题人的压力,现在分摊到老师就会成倍地减少。与之前相比,不同处在于引入了老师这个角色。

        如果以同样方式解决MapReduce问题,那“老师”的角色应该由谁来扮演呢?MapReduce的初衷之一是“尽量移动计算而不是数据”。假如数据存放于HDFS这样的文件系统上,移动数据的成本在于机器之间的带宽限制,由此HDFS网络拓扑结构表示机器之间数据移动的等级。MapReduce的map task会去访问HDFS的存储block,如果block在机器本地或是与task tracker 在同一rack内,对执行没有太大影响,否则集群带宽会严重影响task执行效率。

        从上述描述来看,影响task执行的最大网络拓扑范围是rack。一般来说,Rack间的网络带宽肯定要比rack内的带宽小。那我们就以rack来作为“老师”的角色。以此假设,我们在每个rack内将某台机器设为secondary job tracker,负责rack内task资源的调度与分发单位。结构图如下:





        这个结构有两种job tracker:Global job tracker与Secondary job tracker。Global JT负责跨rack的task分发与调度。基本task分配策略是根据job输入数据的block存储情况,只分配block在当前rack内的map task到rack上,分配reduce task 到 map task多的rack上。Secondary JT与Global JT保持着心跳,它管理的map task操作数据要么是node-local,要么是rack-local  cache 级别,不会再有map task跨rack取数据的场景,所以分发策略就很简单了。

        在这个结构下,client提交job的流程就变成:1. Client上传job相关的输入数据到HDFS上,HDFS会将block幅本存放与不同的data node上,这些data node有在同一个rack内,也有跨rack存在的。2. job提交到Global JT后,根据block存储情况(在哪些rack上存在block就往哪些rack的Secondary JT发送map task,且根据rack上map task的多少来分发reduce task)。3. Secondary JT向Global JT汇报当前rack内的资源情况,得到那些自己rack内的task。4. Secondary JT响应本rack内的TT 心跳,然后分配适合的task来执行。

        以rack划分MapReduce架构,也是考虑到HDFS与网络带宽情况的结果。如果每个rack内有15到20台机器,10000台机器差不多可以分布到七八百rack内。Global JT与Secondary JT的并发压力都不大。这样的垂直扩展只是暂时解决了部分问题,但没有从根本上解决job分配程序的压力。

        上述只是我的个人想法,希望得到各位的指正及建议,谢谢!

  • 大小: 50.4 KB
  • 大小: 27.8 KB
  • 大小: 71.4 KB
1
1
分享到:
评论

相关推荐

    Hadoop技术内幕:深入解析MapReduce架构设计与实现原理.pdf

    MapReduce是Hadoop生态系统中的基石,它为大规模数据处理提供了一种分布式计算模型。以下是对MapReduce架构设计与实现原理的详细解读: MapReduce的核心思想可以概括为两个主要阶段:Map阶段和Reduce阶段。在Map...

    Hadoop+HDFS和MapReduce架构浅析

    ### Hadoop+HDFS和MapReduce架构浅析 #### 摘要 本文旨在深入剖析Hadoop中的两大核心组件——HDFS(Hadoop Distributed File System)和MapReduce的工作原理及其实现机制。首先,我们将介绍Hadoop NameNode与...

    深入理解MapReduce架构设计与实现原理 高清 完整书签

    MapReduce是Google提出的一种分布式计算模型,它为海量数据的处理提供了强大的计算能力,尤其在大规模数据集的并行处理上表现突出。这本书高清且带有完整书签,方便读者查阅和学习。 MapReduce的核心思想可以分为两...

    MapReduce架构

    ### MapReduce架构详解 #### 一、概述 MapReduce是一种重要的编程模型,它不仅能够处理大规模数据集,还能实现高效的大数据处理与分析。MapReduce的设计初衷是为了简化并行编程,使得开发人员无需深入理解底层...

    Hadoop技术内幕:深入解析MapReduce架构设计i与实现原理

    《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》是关于大数据处理领域的一本经典著作,专注于探讨Hadoop的核心组件——MapReduce。MapReduce是Google提出的一种分布式计算模型,被广泛应用于海量数据的...

    Hadoop技术内幕:深入解析MapReduce架构设计与实现原理

    MapReduce是一种分布式计算模型,由Google在2004年提出,后被Apache Hadoop采纳并实现为开源工具。这个模型极大地简化了大规模数据处理的问题,使得开发者能够处理PB级别的数据。 MapReduce的工作流程分为三个主要...

    MapReduce系统架构

    MapReduce是一种用于处理大规模数据集的编程模型及其相应的实现。它能够将大规模数据集的处理任务分配到多台计算机(节点)上进行并行处理。MapReduce的核心思想是将计算任务分解为两个阶段:Map(映射)和Reduce...

    Hadoop技术内幕深入解析MapReduce架构设计与实现原理

    此外,文档还可能讨论Hadoop生态系统中的其他组件,如HDFS(Hadoop分布式文件系统)、YARN(另一种资源协调器)、HBase(NoSQL数据库)、ZooKeeper(协调服务)、Avro(数据序列化系统)等,因为MapReduce往往与其他...

    基于Hadoop的MapReduce架构研究.docx

    基于Hadoop的MapReduce架构是大数据处理领域的重要技术,它为海量数据的高效处理提供了可能。本文将深入探讨Hadoop的原理、MapReduce的工作机制及其在大数据分析中的应用。 Hadoop是一个开源的分布式计算框架,由...

    Hadoop技术内幕 深入理解MapReduce架构设计与实现原理等.zip

    《Hadoop技术内幕:深入理解MapReduce架构设计与实现原理》是针对大数据处理领域的一份重要资料,它全面解析了Hadoop的核心组件MapReduce的内在工作机制。Hadoop作为开源的大数据处理框架,因其分布式计算能力而备受...

    (hadoop HDFS 和 Mapreduce 架构浅析

    首先,Hadoop的HDFS(Hadoop Distributed File System)是一种高度容错性的系统,适合在廉价硬件上运行。HDFS有着高吞吐量的数据访问,适合那些有大量数据集的应用程序。HDFS的设计理念是将大文件分割成固定大小的...

    hadoop技术内幕 深入解析mapreduce架构设计与实现原理

    ### Hadoop技术内幕:深入解析MapReduce架构设计与实现原理 #### 一、Hadoop概述 Hadoop是一种能够处理海量数据的分布式计算框架,由Apache软件基金会开发维护。它最初的设计目的是为了支持搜索引擎领域的数据处理...

    大数据MapReduce和YARN架构原理.pdf

    MapReduce架构原理 MapReduce是Google发布的分布式计算框架,设计用于大规模数据集的并行运算。它的特点是易于编程、高度可扩展、高容错性。MapReduce的应用场景包括大规模数据集的离线批处理计算、任务分而治之、...

    Google_MapReduce中文版-系统架构

    MapReduce架构能够运行在由普通计算机组成的集群上,实现数据的并行化处理。对于程序员来说,他们只需要关注Map和Reduce函数的实现,而不需要直接处理并行计算、错误处理、数据分布和负载均衡等复杂的集群管理细节。...

    一种基于MapReduce的分布式索引方法.pdf

    针对现有方法的不足,本文提出了一种面向海量大文本的MapReduce索引方法,即MI-RM(MapIndex-Reduce Merge)。该方法的核心思想是在Map函数中对文档进行解析和索引,在Reduce函数中对这些索引数据进行合并。 MI-RM...

    MapReduce的实现细节

    MapReduce是一种广泛应用于大数据处理领域的分布式编程模型,最初由Google提出并在其内部系统中得到广泛应用。随着开源社区的发展,尤其是Apache Hadoop项目的兴起,MapReduce成为了分布式计算领域的一个重要组成...

    mapreduce.pdf

    **MapReduce** 是一种编程模型,用于大规模数据集(大于1TB)的分布式计算,它极大简化了开发人员处理海量数据的工作。MapReduce的核心思想是将复杂的、大数据量的计算过程分解成两个基本阶段:Map(映射)和Reduce...

    一个MapReduce简单程序示例

    MapReduce是一种分布式计算模型,由Google在2004年提出,主要用于处理和生成大规模数据集。Hadoop是Apache开源项目,它实现了MapReduce模型,为大数据处理提供了基础架构。在这个"一个MapReduce简单程序示例"中,...

Global site tag (gtag.js) - Google Analytics