MapReduce是什么?

MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,MapReduce程序本质上是并行运行的,因此可以解决海量数据的计算问题.

MapReduce任务过程被分为两个处理阶段:map阶段和reduce阶段.每个阶段都以键值对作为输入和输出.用户只需要实现map()和reduce()两个函数即可实现分布式计算.

MapReduce的组成部分

1、JobClient(客户端)

  用户编写的MapReduce程序通过客户端提交到JobTracker

2、JobTracker

  这是一个master服务,程序启动后,JobTracker负责资源监控和作业调度。JobTracker监控所有的TaskTracker和job的健康状况,一旦发生失败,即将之转移到其他节点上,同时JobTracker会跟踪任务的执行进度、资源使用量等信息,并将这些信息告诉任务调度器,而调度器会在资源出现空闲时,选择合适的任务使用这些资源。一个Hadoop集群只有一个JobTracker,存在单点故障的可能。

3、TaskTracker

  运行在多个节点上的slaver服务。TaskTracker主动与JobTracker通信接受作业,并负责直接执行每个任务。TaskTracker 会周期性地通过Heartbeat将本节点上资源的使用情况和任务的运行进度汇报给JobTracker,同时接收JobTracker 发送过来的命令并执行相应的操作(如启动新任务、杀死任务等)。

MapReduce作业和任务

  MapReduce作业(job)是用户提交的最小单位,而Map任务/Reduce任务(task)是MapReduce计算的最小单位。

  当用户向Hadoop提交一个MapReduce作业时,JobTracker的作业分解模块会将其拆分为任务交由各个TaskTracker执行,在MapReduce计算框架中,任务分为两种——Map任务和Reduce任务。

  一个TaskTracker能够启动的任务数量是由TaskTracker配置的任务槽(slot)决定的,槽又分为Map槽和Reduce槽,并且Map任务只能使用Map槽,Reduce任务只能使用Reduce槽。

MapReduce流程分析

作业提交:

  1.由JobClient启动一个作业。

  2.向JobTracker请求一个作业ID。

  3.将运行作业所需要的资源(包括作业jar文件、第三方jar文件等)复制到HDFS下的特定目录,供作业运行时使用。

  4.调用JobTracker的submitJob方法告知JobTracker作业准备执行。

作业初始化:

  5.当JobTracker收到对其submitJob方法的调用后,会将此调用交由作业调度器进行调度,并对其初始化,创建一个表示正在运行作业的对象。

  6.为了给TaskTracker分配任务,必须先从HDFS系统中获取已计算好的输入分片信息。然后创建Map任务和Reduce任务。

任务分配:

  7.TaskTracker每隔一段时间会给JobTracker发送一个心跳,告诉JobTracker它是否存活、节点资源使用情况、各个任务的状态等,如果JobTracker觉得TaskTracker已经准备好了,那么JobTracker会给TaskTracker分配一个新任务。

任务执行:

  8.TaskTracker在接到启动任务的命令后,会把作业的jar文件、第三方jar文件等作业所需要的文件复制到TaskTracker所在的节点的本地目录。

  9.接着TaskTracker会新建一个TaskRunner实例来运行任务,TaskRunner启动一个JVM(步骤9)运行每个任务(步骤10)。

任务完成:

  当JobTracker收到最后一个任务已完成的通知后(通常是Reduce任务),便把作业的状态设置为成功,JobClient会将作业完成的消息在控制台打印。最后JobTracker会清空作业的工作状态,并让TaskTracker也清空作业的工作状态。

参考:

http://weixiaolu.iteye.com/blog/1474172

《hadoop海量数据处理技术详解与项目实战》

MapReduce工作机制的更多相关文章

  1. hadoop MapReduce 工作机制

    摸索了将近一个月的hadoop , 在centos上配了一个伪分布式的环境,又折腾了一把hadoop eclipse plugin,最后终于实现了在windows上编写MapReduce程序,在cen ...

  2. MapReduce工作机制——Word Count实例(一)

    MapReduce工作机制--Word Count实例(一) MapReduce的思想是分布式计算,也就是分而治之,并行计算提高速度. 编程思想 首先,要将数据抽象为键值对的形式,map函数输入键值对 ...

  3. hadoop知识点总结(一)hadoop架构以及mapreduce工作机制

    1,为什么需要hadoop 数据分析者面临的问题 数据日趋庞大,读写都出现性能瓶颈: 用户的应用和分析结果,对实时性和响应时间要求越来越高: 使用的模型越来越复杂,计算量指数级上升. 期待的解决方案 ...

  4. MapReduce06 MapReduce工作机制

    目录 5 MapReduce工作机制(重点) 5.1 MapTask工作机制 5.2 ReduceTask工作机制 5.3 ReduceTask并行度决定机制 手动设置ReduceTask数量 测试R ...

  5. 浅谈MapReduce工作机制

    1.MapTask工作机制 整个map阶段流程大体如上图所示.简单概述:input File通过getSplits被逻辑切分为多个split文件,通通过RecordReader(默认使用lineRec ...

  6. [hadoop读书笔记] 第五章 MapReduce工作机制

    P205 MapReduce的两种运行机制 第一种:经典的MR运行机制 - MR 1 可以通过一个简单的方法调用来运行MR作业:Job对象上的submit().也可以调用waitForCompleti ...

  7. yarn/mapreduce工作机制及mapreduce客户端代码编写

    首先需要知道的就是在老版本的hadoop中是没有yarn的,mapreduce既负责资源分配又负责业务逻辑处理.为了解耦,把资源分配这块抽了出来,形成了yarn,这样不仅mapreudce可以用yar ...

  8. 图文详解MapReduce工作机制

    job提交阶段 1.准备好待处理文本. 2.客户端submit()前,获取待处理数据的信息,然后根据参数配置,形成一个任务分配的规划. 3.客户端向Yarn请求创建MrAppMaster并提交切片等相 ...

  9. MapReduce的工作机制

    <Hadoop权威指南>中的MapReduce工作机制和Shuffle: 框架 Hadoop2.x引入了一种新的执行机制MapRedcue 2.这种新的机制建议在Yarn的系统上,目前用于 ...

随机推荐

  1. 生成excel文件

    java操作Excel最常用的开源组件有poi与jxl.jxl是韩国人开发的,发行较早,但是更新的很慢,目前似乎还不支持excel2007.poi是apache下的一个子项目,poi应该是处理ms的o ...

  2. LeeCode-Sqrt(x)

    Implement int sqrt(int x). Compute and return the square root of x. int mySqrt(int x) { ) ; /* for(i ...

  3. Unity 制作RPG小地图

    效果图: 最近公司要制作小地图,搜索网上的文章没找到有什么小实例,=.=直接上步骤: 制作小地图步骤: 1. 人物头顶有一个面板呈现人物图标 2. 有一个摄像机在主角头顶!(Target Textur ...

  4. iOS 实时监听app的网络连接状态

    实际iOS开发中,在网络通信中我们大部分使用第三方(只谈短链),譬如 AFNetworking.ASIHttpRequest(这个停更了,想必现在没多少人用),swift的 Alamofire 等. ...

  5. Javascript基础学习笔记

    什么是变量?变量是用于存储信息的容器变量的声明语法: var 变量名 变量名 = 值;变量要先声明再赋值变量可以重复赋值变量的命名规则变量必须以字母开头:变量也能以$和_符号开头(不过我们不推荐这么做 ...

  6. uglifyjs入门接触

    一.背景 今天在看<锋利的jQuery>文时,突然看到Uglifyjs压缩工具,感觉值得一试(玩),所以网上稍微搜了一下资料,简单的运用了一下,发现入门非常简单,当然网上有很多在线压缩工具 ...

  7. 发现一个不错的学习git的地方

    Git入门:http://rogerdudler.github.io/git-guide/index.zh.html 简洁.实用.高效的学习git基本操作的方式

  8. python-整理-面向对象

    python的类和perl的类有相似之处,类的方法的第一个参数是表示类的对象自己,相当于c#的this python中定义类 class person: ''示例类,人'' count=0; def ...

  9. jquery 鼠标右键事件、左键单击事件判定

    $(function(){ $('a').mousedown(function(e){ alert(e.which) // 1 = 鼠标左键 left; 2 = 鼠标中键; 3 = 鼠标右键 retu ...

  10. php 函数之 )_each()list()implode()explode()in_array()

    <?php /* implode() 把数组组合成字符串 explode() 把字符串分割成数组 in_array() 检测内容是否在数组中 each()把数组元素拆分成新的数组 list() ...