MapReduce

时间:2020-03-15 16:26:02   收藏:0   阅读:216

MapReduce概述 

分布式并行编程

数据处理能力提升的两条路线

单核CPU到双核到四核到八核

分布式并行编程:不是把程序在一台单机上运行,借助一个集群通过多台机器同时并行处理大规模数据集

分布式并行编程是多台计算机同时在运行相关的程序

分布式与集群是什么?区别是什么?

MapReduce和传统的并行编程框架

 

集群的架构和容错性

硬件价格及扩展性

编程和学习难度

适用场景

传统的并行编程框架

采用共享式架构(共享内存、共享底层的存储空间),例如性能计算模型HPC

1、扩展比较难2、因为硬件之间紧密耦合,所以其中一个硬件发生故障以后容易导致整个集群不可工作

采用刀片服务器,高速网络一集存储区域网络SAN

普通刀片服务器几万,好一点的十几万(成本高)

且只能纵向扩展(增加内存、更多磁盘)

编程难度高

(程序员不仅要解决要做什么,同时还要解决怎么做(必须要通过程序的方式告诉它怎么做))

编程原理和多线程的编程逻辑比较类似,来实现不同任务之间的同步

用于实施的细粒度计算

尤其适用于计算密集型的应用

MapReduce

采用典型的非共享式架构

在整个集群当中,每个节点都拥有自己的内存(节点之间非共享),任何一个节点出现问题,不会影响其他节点正常运行,整个集群中又设计了冗余和容错机制

整个集群可以随意增加减少相关的计算节点,这个个人计算机就可以(成本低、扩展性好)

MapReduce只需要告诉系统你要做什么事情,而不需要开发人员去告诉它如何去做。它会屏蔽掉整个分布式程序运行底层的所有细节(包括同步以及不同进程之间的通信、负载均衡、失败的恢复等)整个都不需要开发人员去做,整个系统框架自动帮你实现

MapReduce会自动实现分布式部署,部署到集群上面的各个机器上面去运行

一般适用于非实时的批处理以及数据密集型的应用

 

MapReduce模型简介

MapReduce整个框架的核心设计就是两个函数:Map和Reduce

MapReduce的策略:采用分而治之

当采用MapReduce去做大规模数据处理的时候

MapReduce会把非常庞大的数据集,切分成非常多的独立的小分片(spilt)

然后为每一个分片单独的启动一个map任务

最终通过多个map任务,并行地在多个机器上去处理

 

MapReduce的理念:计算向数据靠拢而不是数据向计算靠拢

数据向计算靠拢是指:完成一次数据分析时,选择一个计算节点,把运行数据分析的程序放到计算节点上运行

然后把它涉及到的数据,全部从各个不同节点上面拉过来,传输到计算发生的地方

但是在大数据时代,把所有的数据拉到一个计算节点上去计算,基本上是不可能的(计算机处理起来会崩溃)

计算向数据靠拢是指:在做应用程序计算的时候,构建一个集群,在集群中选择相关的机器作为map机器,这些map机器负责相关的数据处理分析,还有一些是Reduce机器,做Reduce任务处理。

拿这些机器去做数据处理,假如说要去处理某一很大的数据集(数据集被分布的存储到各个节点上面(HDFS是以块为单位存储数据),这些数据块都是存储到不同的机器节点上面去),假设某一个数据块存储在机器A上面,对于MapReduce来说,如果想对数据块A进行分析的话,但是它又不存在机器A上面,这时,MapReduce会去寻找离机器A最近的map机器去完成对数据块的处理。通常来讲比较理想情况下,map任务就是和数据块在同一个机器上面,这就是实现了计算向数据靠拢,数据不需要发生迁移,计算就可以在数据节点上面执行,完成运算得到结果,最终把结果汇总到相关的任务协调节点,提交给用户。

通过这种方式:大大减少了整个网络当中的数据传输开销,从而提升了整个分布式程序处理性能。

 

MapReduce的架构:采用了master/slave的架构

Master/slave架构中包括:一个master服务器以及若干个slave服务器

Master上面会运行作业跟踪器(JobTracker)

JobTracker负责整个作业的调度和处理以及失败和恢复

slave上面会运行负责具体任务执行的组件(TaskTracker)

TaskTracker负责接收JobTracker给它发的作业处理指令,完成具体的任务处理

技术分享图片

 

MapReduce体系结构

技术分享图片

Client(客户端)

通过Client可以提交用户编写的应用程序,用户通过它将应用程序交到JobTracker端

通过这些Client,用户也可以通过它提供的一些接口去查看当前作业的运行状态

通常在Hadoop中,通常来讲应用程序到了集群当中都是表现为作业的形式

JobTracker(作业跟踪器(管家))

负责资源的监控和作业的调度

监控底层的其他的TaskTracker以及当前运行的Job的健康状况

一旦探测到失败的情况就把这个任务转移到其他节点继续执行跟踪任务执行进度和资源使用量,并会把这些信息发送给任务调度器Task Schedule

Task Schedule

负责任务调度(解决应该把哪个Task(任务)分发给哪个TaskTracker去执行(各个TaskTracker是分布在不同的机器上面,负责执行具体任务))

它会从具有空闲资源的节点中选出相关节点,然后把Task分配到这些节点上去执行

Task Schedule是一个可插拔模块,允许用户自己去编写调度模块,采用自己的任务调度策略去实现

TaskTracker

TaskTracker 会周期性地通过“心跳”将本节点上资源的使用情况和任务的运行进度汇报给JobTracker,同时接收JobTracker 发送过来的命令并执行相应的操作(如启动新任务、杀死任务等)

TaskTracker是以一种什么方式衡量资源使用情况?

TaskTracker使用一个槽的概念,叫slot。它会把机器上面所有的CPU内存资源进行打包,然后把资源进行等分,等分成很多slot。slot是一个资源调度单位。一个Task 获取到一个slot 后才有机会运行,而Hadoop调度器的作用就是将各个TaskTracker上的空闲slot分配给Task使用。slot 分为Map slot 和Reduce slot 两种,分别供MapTask 和Reduce Task 使用。两种类型slot是不通用的。如果有10个slot,那么5个给map、5个给reduce,如果reduce任务是空闲的,一个槽都没用,map的槽已经被map任务占满了,而且还有一个map任务等待执行,但reduce槽也不会分给排队的map任务,该缺陷Hadoop2.0中做出了修改。

 所以是以slot为单位调度资源,所以是只有这个机器上有空闲的slot,才能把相关的Task分配给他执行,如果有空闲的map slot,就把map Task分配给他执行。如果有空闲的reduce slot,就把reduce Task分配给他去执行

Task(任务)

Task包括map任务(专门执行map函数)和reduce任务(专门执行reduce函数)

这两个任务都是由TaskTracker来启动的

在同一台机器上面是可以同时运行map Task和reduce Task这两种任务的

 

MapReduce工作流程 

 

 

原文:https://www.cnblogs.com/Teletubbies-C/p/MapReduce.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!