您的位置:首页 > 大数据

大数据技术Hadoop入门理论系列之三--MapReduce框架原理简介

2016-01-27 16:49 696 查看

MapReduce介绍 Technorati 标记: 大数据,hadoop,mapreduce,yarn

MapReduce是一个最先由Google提出的分布式计算软件构架,它可以支持大数据量的分布式处理。
这个架构最初起源于函数式程式的map和reduce两个函数组成。经过多年的发展和应用MR已经发展
成能适应多种环境的分布式计算框架。它有以下几大特点:
高度抽象易理解
MapReduce计算框架通过屏蔽底层分布式处理细节,向应用开发程序仅仅暴露Map(映射)和Reduce
(规约)两个接口。接口含义清晰,通俗易懂。只要是科班出身的开发人员都能理解并能基于其进行
业务逻辑开发。
失效处理简单可靠
MapReduce的计算框架充分考虑了分布式并行计算中的异常问题,分布式计算当中硬件、软件、网络
等失效是常态,因此MR对系统级异常采取了简单的处理逻辑,失败重新调度,此异常处理机制大大简化
了应用处理系统级异常的难度和复杂度。
自动分布无需干预
MapReduce计算框架是一个弹性自适应框架,真正可以做到代码一次编写多次运行。在数据容量随之变大
时,服务器进行扩容时,计算可以随之分布在更多的机器上而不需要进行代码修改。
以上特点让分布式并行计算的学习曲线大大平缓,从而很快在各大互联网企业以及不同行业当中流行起来。

MapReduce思想 MapReduce背后的设计思想还是比较朴素的,主要有:
分而治之
分而治之在各个领域都有广泛应用,比如战争,面对有庞大数目的敌人,想办法分化敌人,从而以分多次优势兵力消灭小股敌人。伟大的主席曾经将他用的出神入化。又比如企业管理,现代公司普遍采取事业部也是分而治之思想的应用。以整体方式作战将导致企业动作缓慢、反应迟钝,而事业部制,大家都仅需对结果对总体战略负责,本身有更多的灵活度,从而保证了企业的效率和盈利能力。
MapReduce同样采取类似方案,将要处理的数据分割成一小块一小块,由多个任务同时对这些小块进行处理,然后将处理结果进行合并形成最终结果输出。当然考虑到现代计算机结构体系,每块的任务处理机制和流程都是一样。因为其分担在每个任务的数据比较小,而且是同时并行进程,所以数据处理性能大大提升。
分工合作
专业化、分工合作是现代企业管理的基础。良好定义的职责、明晰的工作流程是任务完美完成的必要条件。MapReduce开创了将分布式计算框架进行专业分工的先河。其定义了框架本身负责分布式并行计算的所需要的各种繁杂的系统处理,同时定义了应用只需要完成Map/Reduce两个算子。以前的分布式应用基本上都是分布式并行计算的各种系统级处理比如网络、多线程等与应用捆绑,从而只能一个应用一个应用进行调整开发,严重影响了开发效率。
合理抽象
作为一个计算框架,合理的抽象思维至关重要。没有合理的抽象接口,框架的构建将陷于各种具体业务场景的处理逻辑当中。这点在应用开发时很常见。有很多的设计考虑时没考虑周到,在后面应用开发时发现不能满足业务要求,从而进行补丁,导致系统设计编码存在隐患。MapReduce则很好的把握了此要求。它不是将整个任务抽象成一个接口,类似于大部分plugin的设计,也没有固定处理环节,每个环节可以自定义,类似于工作流。而是固化了一个处理流程,以函数编程接口方式抽象给应用开发,及其完美的把握了抽象程度。
       总体说来,mapreduce的基本原理如下图所示:



       基于上面所说,从图中可以理解MR的主要分布式计算在于MAP和reduce任务,这些任务分布在不同计算节点完成,其余部分比如数据存储、中间结果等由不同组件完成,任务本身的管理和分配也由独立组件完成。
    


    此图是上图的进一步细化,combiner将同一个map task中相同key的对应计算结果合并,这样可以在一定程度上减少网络传输,也更符合map抽象的要求。Partitioner对map产生结果做重新映射,保证不同maptask产生key传输到相同的reducetask,从而保证结果计算的正确性。
      下文将简要描述Hadoop体系对MR的实现机制。
MapReduce原理
     1. MRv1



   上图描述了mapreduce第一代的主要工作原理,其中jobtracker是mapreduce控制核心,它需要与集群中其它服务器保持定时心跳。tasktracker是分布式任务的执行核心,对同一块数据处理的maptask任务会尽可能安排在本地服务器上以保证数据局部化原理,加快处理速度。
TaskTracker 是 Map-reduce 集群中每台机器都有的一个部分,他做的事情主要是监视自己所在机器的资源情况。
TaskTracker 同时监视当前机器的 tasks 运行状况。TaskTracker 需要把这些信息通过 heartbeat 发送给 JobTracker,JobTracker 会搜集这些信息以给新提交的 job 分配运行在哪些机器上。上图虚线箭头就是表示消息的发送 - 接收的过程。
   以上架构简单明了,在一定规模内集群的可扩展能力还是很强的,对于一定量的大数据处理比如PB级以下处理性能还是不错的。
     2. MRv2(yarn)
      为了解决一代MR设计中的关于扩展性、性能、可靠性、机器使用效率等问题,hadoop发展了第二代MR架构,如下图所示:
   


重构根本的思想是将 JobTracker 两个主要的功能分离成单独的组件,这两个功能是资源管理和任务调度 / 监控。新的资源管理器全局管理所有应用程序计算资源的分配,每一个应用的 ApplicationMaster 负责相应的调度和协调。一个应用程序无非是一个单独的传统的 MapReduce 任务或者是一个 DAG( 有向无环图 ) 任务。ResourceManager 和每一台机器的节点管理服务器能够管理用户在那台机器上的进程并能对计算进行组织。
事实上,每一个应用的 ApplicationMaster 是一个详细的框架库,它结合从 ResourceManager 获得的资源和 NodeManager 协同工作来运行和监控任务。
上图中 ResourceManager 支持分层级的应用队列,这些队列享有集群一定比例的资源。从某种意义上讲它就是一个纯粹的调度器,它在执行过程中不对应用进行监控和状态跟踪。同样,它也不能重启因应用失败或者硬件错误而运行失败的任务。
ResourceManager 是基于应用程序对资源的需求进行调度的 ; 每一个应用程序需要不同类型的资源因此就需要不同的容器。资源包括:内存,CPU,磁盘,网络等等。可以看出,这同现 Mapreduce 固定类型的资源使用模型有显著区别,它给集群的使用带来负面的影响。资源管理器提供一个调度策略的插件,它负责将集群资源分配给多个队列和应用程序。调度插件可以基于现有的能力调度和公平调度模型。
上图中 NodeManager 是每一台机器框架的代理,是执行应用程序的容器,监控应用程序的资源使用情况 (CPU,内存,硬盘,网络 ) 并且向调度器汇报。
每一个应用的 ApplicationMaster 的职责有:向调度器索要适当的资源容器,运行任务,跟踪应用程序的状态和监控它们的进程,处理任务的失败原因。
通过如上方式的改进,jobtask的单点瓶颈通过applictionmaster解决,applictionmaster有resourcemanager在job启动时指定,避免了单点同时也提升了集群扩展的能力。同时container概念的引进,抽象了物理机器资源,集群可以管控更多资源和对任务进行更好的隔离,还能对资源提供更好的控制,避免一代mr经常出现的OOM(out of memory)错误。
上文从设计思想、基本模型、hadoop mr(1.2)几个方面对目前hadoop生态的MR框架进行了描述,对具体实践以及编程应用理解其工作机制有一定帮助,后续实战系列再以具体例子讲解如何进行MR编程。
参考文献: MapReduce原理与设计思想
图解mapreduce原理和执行过程
介绍Hadoop新的map-reduce框架(Yarn)的原理

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: