1. MapReduce 定义

  Hadoop 中的 MapReduce是一个使用简单的软件框架。基于它写出来的应用程序能够执行在由上千个商用机器组成的大型集群上,并以一种可靠容错式并行处理TB级别的数据集

2. MapReduce 特点

   MapReduce 为什么如此受欢迎?尤其如今互联网+时代,互联网+公司都在使用 MapReduce。MapReduce 之所以如此受欢迎。它主要有下面几个特点。

- MapReduce 易于编程。它简单的实现一些接口,就能够完毕一个分布式程序。这个分布式程序能够分布到大量便宜的 PC 机器执行。也就是说你写一个分布式程序,跟写一个简单的串行程序是一模一样的。 就是由于这个特点使得 MapReduce 编程变得非常流行。

- 良好的扩展性。当你的计算资源不能得到满足的时候,你能够通过简单的添加机器来扩展它的计算能力。

- 高容错性。MapReduce 设计的初衷就是使程序能够部署在便宜的 PC 机器上,这就要求它具有非常高的容错性。比方当中一台机器挂了,它能够把上面的计算任务转移到另外一个节点上面上执行。不至于这个任务执行失败。并且这个过程不须要人工參与。而全然是由 Hadoop 内部完毕的。

- 适合 PB 级以上海量数据的离线处理

这里加红字体离线处理,说明它适合离线处理而不适合在线处理。比方像毫秒级别的返回一个结果。MapReduce 非常难做到。

  MapReduce 尽管具有非常多的优势。可是它也有不擅长的地方。这里的不擅长不代表它不能做,而是在有些场景下实现的效果差,并不适合 MapReduce 来处理,主要表如今下面几个方面。

- 实时计算

MapReduce 无法像 Mysql 一样,在毫秒或者秒级内返回结果。

- 流式计算。流式计算的输入数据时动态的。而 MapReduce 的输入数据集是静态的,不能动态变化。

这是由于 MapReduce 自身的设计特点决定了数据源必须是静态的。

- DAG(有向图)计算。多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出。在这样的情况下,MapReduce 并非不能做,而是使用后,每一个MapReduce 作业的输出结果都会写入到磁盘,会造成大量的磁盘IO,导致性能非常的低下。


3. MapReduce的架构

  和HDFS一样,MapReduce也是採用Master/Slave的架构,其架构图例如以下所看到的。

  

   MapReduce包括四个组成部分,分别为Client、JobTracker、TaskTracker和Task,下面我们具体介绍这四个组成部分。

   1)Client client

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

   2)JobTracker

  JobTracke负责资源监控和作业调度。

JobTracker 监控全部TaskTracker 与job的健康状况。一旦发现失败,就将相应的任务转移到其它节点。同一时候。JobTracker 会跟踪任务的执行进度、资源使用量等信息,并将这些信息告诉任务调度器,而调度器会在资源出现空暇时,选择合适的任务使用这些资源。在Hadoop 中,任务调度器是一个可插拔的模块。用户能够依据自己的须要设计相应的调度器。

  

   3)TaskTracker

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

TaskTracker 使用“slot”等量划分本节点上的资源量。

“slot”代表计算资源(CPU、内存等)。一个Task 获取到一个slot 后才有机会执行,而Hadoop 调度器的作用就是将各个TaskTracker 上的空暇slot 分配给Task 使用。slot 分为Map slot 和Reduce slot 两种。分别供Map Task 和Reduce Task 使用。TaskTracker 通过slot 数目(可配置參数)限定Task 的并发度。

   4)Task

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

   Map Task 执行步骤例如以下图 所看到的:由该图可知。Map Task 先将相应的split 迭代解析成一个个key/value 对,依次调用用户 自己定义的map() 函数进行处理。终于将暂时结果存放到本地磁盘上, 当中暂时数据被分成若干个partition。每一个partition 将被一个Reduce Task 处理。

  

   Reduce Task 执行过程下图所看到的。该过程分为三个阶段:

  

①从远程节点上读取Map Task 中间结果(称为“Shuffle 阶段”)。

②依照key 对key/value 对进行排序(称为“Sort 阶段”);

③依次读取< key, value list>,调用用户自己定义的reduce() 函数处理,并将终于结果存到HDFS 上(称为“Reduce 阶段”)。


4. MapReduce 内部逻辑

  下面我们通过 MapReduce 的内部逻辑,来分析 MapReduce的数据处理过程。

我们以WordCount为例,来看一下mapreduce 内部逻辑。例如以下图所看到的。

   

  

  MapReduce 内部逻辑的大致流程主要由下面几步完毕。

  1、首先将 HDFS 中的数据以 Split 方式作为 MapReduce 的输入。前面我们提到,HDFS中的数据是以 block存储,这里怎么又变成了以Split 作为输入呢?事实上 block 是 HDFS 中的术语。Split 是 MapReduce 中的术语。默认的情况下。一个 Split 能够相应一个 block,当然也能够相应多个block,它们之间的相应关系是由 InputFormat 决定的。默认情况下。使用的是 TextInputFormat,这时一个Split相应一个block。 如果这里有4个block,也就是4个Split。分别为Split0、Split1、Split2和Split3。这时通过 InputFormat 来读每一个Split里面的数据,它会把数据解析成一个个的(key,value)。然后交给已经编写好的Mapper 函数来处理。

  2、每一个Mapper 将输入(key,value)数据解析成一个个的单词和词频,比方(a,1)、(b,1)和(c,1)等等。

   4、在reduce阶段。每一个reduce要进行 shuffle 读取它所相应的数据。当全部数据读取完之后。要经过Sort全排序,排序之后再交给 Reducer 做统计处理。比方,第一个Reducer读取了两个的(a,1)键值对数据,然后进行统计得出结果(a,2)。

   5、将 Reducer 的处理结果,以OutputFormat数据格式输出到 HDFS 的各个文件路径下。这里的OutputFormat默觉得TextOutputFormat,key为单词,value为词频数,key和value之间的切割符为”\tab”。 由上图所看到的,(a 2)输出到Part-0。(b 3)输出到Part-1,(c 3)输出到Part-2。

深入理解MapReduce的架构及原理的更多相关文章

  1. MapReduce的架构及原理

    MapReduce是一种分布式计算模型,是Hadoop的主要组成之一,承担大批量数据的计算功能.MapReduce分为两个阶段:Map和Reduce. 一.MapReduce的架构演变 客户端向Job ...

  2. 初步掌握MapReduce的架构及原理

    目录 1.MapReduce定义 2.MapReduce来源 3.MapReduce特点 4.MapReduce实例 5.MapReduce编程模型 6.MapReduce 内部逻辑 7.MapRed ...

  3. 深入理解HDFS的架构和原理

    (一) HDFS主要是用于做什么的? HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础,是基于流数据模式访问和处 ...

  4. 2本Hadoop技术内幕电子书百度网盘下载:深入理解MapReduce架构设计与实现原理、深入解析Hadoop Common和HDFS架构设计与实现原理

    这是我收集的两本关于Hadoop的书,高清PDF版,在此和大家分享: 1.<Hadoop技术内幕:深入理解MapReduce架构设计与实现原理>董西成 著  机械工业出版社2013年5月出 ...

  5. 彻底理解MapReduce shuffle过程原理

    彻底理解MapReduce shuffle过程原理 MapReduce的Shuffle过程介绍 Shuffle的本义是洗牌.混洗,把一组有一定规则的数据尽量转换成一组无规则的数据,越随机越好.MapR ...

  6. Hbase架构与原理

    Hbase架构与原理 HBase是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang所撰写的Google论文"Bigtable:一个结构化数据的分布式存储系统".就 ...

  7. HDFS架构及原理

    原文链接:HDFS架构及原理 引言 进入大数据时代,数据集的大小已经超过一台独立物理计算机的存储能力,我们需要对数据进行分区(partition)并存储到若干台单独的计算机上,也就出现了管理网络中跨多 ...

  8. Spark基本架构及原理

    Hadoop 和 Spark 的关系 Spark 运算比 Hadoop 的 MapReduce 框架快的原因是因为 Hadoop 在一次 MapReduce 运算之后,会将数据的运算结果从内存写入到磁 ...

  9. storm架构及原理

    storm 架构与原理 1 storm简介 1.1 storm是什么 如果只用一句话来描述 storm 是什么的话:分布式 && 实时 计算系统.按照作者 Nathan Marz 的说 ...

随机推荐

  1. 关于ReactiveCocoa的实际用法

    监听UITextView控件 text属性 @weakify(self); [self.textViewAdvice.rac_textSignal subscribeNext:^(NSString * ...

  2. 实现windows操作系统和VB下Linux虚拟操作系统相互传取文件方式总结

    在windows上执行虚拟机跑的是Linux的操作系统,怎样才干在不同的操作系统之间传递文件呢? 这是本人切身体会到的,假设你没有好的方法的话.确实非常痛苦.下面是我个人的方法总结: 方法一.很好用的 ...

  3. zendframework配置篇

    1. 重写配置 httpd.conf配置修改 LoadModule rewrite_module modules/mod_rewrite.so <Directory "D:\PHPPr ...

  4. SASS详解之编译输出的样式

    SASS是一种CSS预处理语言,没有装环境的话是不能被解析的.但是有了koala编译工具之后,解析SASS不需要环境也毫无压力了.SASS的输出格式有四种:嵌套.扩大.紧凑和压缩.下面结合小例子为大家 ...

  5. jquery使用jsonp进行跨域调用

    关于JSONP的概念和为什么要使用JSONP网上已经有很多教程,这一节主要演示下在JQUERY中的ajax方法怎样通过JSONP进行远程调用 首先介绍下$.ajax的参数 type:请求方式 GET/ ...

  6. sscanf %*s

    一次在源码里看到 %*s 的格式,从未见过百思不得其解,今天用google的code搜索,搜到一些使用范例,猜测%*s 是说这里有一些字符,长度不一定,按正则表达式的习惯,*代办任意非负整数.例如: ...

  7. myBatis批量添加,修改和删除

    摘自: http://blog.csdn.net/myjlvzlp/article/details/8434376 1.批量添加元素session.insert(String string,Objec ...

  8. XMPPFrameWork IOS 开发(四)消息和好友上下线

    原始地址:XMPPFrameWork IOS 开发(四) 消息 //收到消息 - (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XM ...

  9. 走进C++程序世界------异常处理

    一. 概述 C++自身有着很强的纠错能力,发展到现在,已经建立了比較完好的异常处理机制. C++的异常情况无非两种,一种是语法错误.即程序中出现了错误的语句,函数.结构和类,致使编译程序无法进行.还有 ...

  10. Android MVP 构架初试

    目前讨论MVP MVVM 的架构也来越多,这种构架也很适合Android.研究MVP记录如下 源码地址RxMVP分支Tag02 原有的MVC构架 刚开始接触Android的时候会觉得Android的整 ...