大数据Hadoop原理03_MapReduce基本架构

1.简介

Map Reduce 是Google 公司的核心计算模型,它将运行于大规模集群上的复杂并行计算过程高度地抽象为两个函数: Map 和Reduce 。Hadoop 是Doug Cutting 受到Google 发表的关于MapReduce 的论文的启发而开发出来的。Hadoop 中的MapReduce 是一个使用简单的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并能可靠容错地并行处理TB 级别的数据集。

2.优势

(1)MapReduce 易于编程:

简单地实现一些接口,就可以完成一个分布式程序,而且这个分布式程序还可以分布到大量廉价的PC 机器运行。也就是说,写一个分布式程序,跟写一个简单的串行程序是一模一样的。MapReduce 易于编程的背后是Map Reduce 通过抽象模型和计算框架把需要做什么( What need to do )与具体怎么做( How to do )分开了,为程序员提供了一个抽象和高层的编程接口和框架,程序员仅需关心其应用层的具体计算问题,仅需编写少量的处理应用本身计算问题的程序代码;如何具体完成这个并行计算任务所相关的诸多系统层细节被隐藏起来,交给计算框架去处理一一从分布代码的执行到大到数千、小到数个节点集群的自动调度使用。就是因为这个特点, MapReduce 编程变得非常流行。

(2)良好的扩展性

当计算资源不能得到满足的时候,可以通过简单地增加机器来扩展它的计算能力。多项研究发现,基于MapReduce 的计算性能可随节点数目增长保持近似于线性的增长,这个特点是MapReduce 处理海量数据的关键,通过将计算节点增至几百或者几千可以很容易地处理数百TB 甚至PB 级别的离线数据。

(3)高容错性:

MapReduce 设计的初衷就是使程序能够部署在廉价的PC 机器上,这就要求它具有很高的容错性。比如,其中一台机器岩机了,它可以把上面的计算任务转移到另一个节点上运行,不至于这个任务运行失败,而且这个过程不需要人工参与,完全是由Hadoop 内部完成的。

3.劣势

(1)实时计算:

MapReduce 无法像Oracle 或者MySQL 那样在毫秒或者秒级内返回结果。如果需要大数据量的毫秒级响应,可以考虑使用HBase 。

(2)流计算

流计算的输入数据是动态的,而MapReduce 的输入数据集是静态的,不能动态变化,这是因为MapReduce 自身的设计特点决定了数据源必须是静态的。如果需要处理流式数据可以用Storm 、Spark Streaming 、Flink 等流计算框架。

(3)DAG (有向图)计算:

多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出。在这种情况下, MapReduce 并不是不能做,而是使用后,每个MapReduce作业的输出结果都会写入磁盘,会造成大量的磁盘IO ,导致性能非常低下,此时可以考虑用Spark 等迭代计算框架。

4.基本框架

MapReduce 也是采用Master/Slave 的主从架构,其架构图如图 所示。

大数据Hadoop原理03_MapReduce基本架构

MapReduce 包含4 个组成部分,分别为Client 、JobTracker 、TaskTracker 和Task 。

( 1 ) Client

每个Job 都会在用户端通过Client 类将应用程序以及配置参数Configuration 打包成JAR 文件存储在HDFS 中,并把路径提交到JobTracker 的Master 服务,然后由Master 创建每一个Task (即MapTask 和ReduceTask)将它们分发到各个TaskTracker 服务中去执行。

( 2 ) JobTracker

Job Tracker 负责资源监控和作业调度。JobTracker 监控所有TaskTracker 与Job 的健康状况,一旦发现失败,就将相应的任务转移到其他节点;同时, JobTracker 会跟踪任务的执行进度、资源使用量等信息,并将这些信息告诉任务调度器,而调度器会在资源出现空闲时,选择合适的任务使用这些资源。在Hadoop 中,任务调度器是一个可插拔的模块,用户可以根据自己的需要设计相应的调度器。

( 3) TaskTracker

TaskTracker 会周期性地通过Heartbeat 将本节点上资源的使用情况和任务的运行进度汇报给JobTracker , 同时接收JobTracker 发送过来的命令并执行相应的操作(如启动新任务、杀死任务等) 。TaskTracker 使用 slot 来衡量划分本节点上的资源量。 slot 代表单位的计算资源( CPU、内存等) 。一个τask 获取到一个slot 后才有机会运行,而Hadoop 调度器的作用就是将各个TaskTracker 上的空闲slot 分配给Task 使用。slot 分为Map slot 和
Reduce slot 两种,分别供M叩Task 和Reduce Task 使用。TaskTracker 通过slot 数目(可配置参数) 限定Task 的并发度。

( 4) Task

Task 分为Map Task 和Reduce Task 两种,均由TaskTracker 启动。HDFS 以固定大小的block 为基本单位存储数据,而对于MapReduce 而言,其处理单位是split 。

HDFS 和MapReduce 共同组成了HDFS 体系结构的核心。HDFS 在集群上实现了分布式文件系统, MapReduce 在集群上实现了分布式计算和任务处理。HDFS 在MapReduce 任务处理过程中提供了对文件操作和存储等的支持,而MapReduce在HDFS 基础上实现了任务的分发、跟踪和执行等工作,并收集结果,两者相互作用,完成了Hadoop 分布式集群的主要任务。

上一篇:Hbase 0.92.1 replication


下一篇:oracle 在C# 中调用oracle的数据库时,出现引用库和当前客户端不兼容的问题解决方案