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

关于环境的配置,网上很多,不再废话。

仅以此系列的博客记录学习过程中的点点滴滴。

##############################传说中的分割线#####################

学习了WordCount程序,也照着网上的某些文章,实现了一些简单的MapReduce程序,可是并没有很好的总结出来如何用hadoop 写 MapReduce 程序,太多的类和接口,用起来并不顺手。终于,回过头来再仔细品品hadoop的MapReduce工作机制,做一次整体的把握。

MapReduce工作执行涉及到四个实体:

1. Client:编写MapReduce程序,配置job,提交job。

2. JobTracker:初始化作业,分配作业,与TaskTracker通信,协调整个作业的执行。

3. TaskTrack:执行Map任务和Reduce任务,与JobTracker保持通信

4. HDFS:保存作业数据、配置信息,输出结果。

MapReduce的工作阶段:

first: input split (输入数据文件切片)

second:Map (执行Map task)

thrid:combiner(在Map计算出中间文件前作一个简单的合并重复key值的操作)

fourth:shuffle(将Map的输出作为Reduce的输入的过程的阶段)

fifth:reduce(执行Reduce task)

MapReduce的工作过程:

简单的讲,首先Client准备好程序,配好job,向JobTracker提交job。JobTracker收到提交来的Job之后,会着手构建Job,其中包括分配JobID,检查输出目录,输入数据文件,输出目录必须存在(原因是如果已经存在输出目录,MapReduce的输出结果就不知道该是overwrite还是append了),输入数据文件必须存在。如果通过检查,JobTracker会根据数据文件大小计算输入分片(Input Split ),64M一片,不够64M算一片,分片完成之后,JobTracker就会配置Job所需要的资源,分配完资源,JobTracker就会初始化作业,初始化工作就是将Job放入一个内部的队列,让配置好的JobTracker能调度这个Job,JobTracker会初始化这个Job,初始化就是创建一个正在运行的Job对象(封装任务、记录信息),以便JobTracker能够跟踪这个Job的状态和进程,初始化完成后,JobTracker会获取有多少个Input Split的信息,每个分片创建一个Map任务。创建完Map任务,接下来就是分配任务了,此时TaskTracker会运行一个循环,定期发送heartbeat给JobTracker,默认间隔时间为5秒,通过heartbeat,JobTracker可以监控和获取TaskTracker的状态与问题,TaskTracker也可以通过heartbeat的返回值获取JobTracker给它的指令。任务分配完成后就是执行任务了,JobTracker通过heartbeat实时监控TaskTracker的状态、计算进度,而TaskTracker也能监控自身的状态。当JobTracker获取到最后一个TaskTracker发给它任务执行成功的通知时,JobTracker会把整个Job状态置为成功,然后当Client检查Job状态(异步行为)时会得到Job完成的通知。

1.1:用户编写MapReduce程序创建新的Client

1.2:Client向JobTracker请求获取JobId,用于标识本次MapReduce作业

1.3:Client将运行作业所需的相关资源。包括Job的配置文件,input split数据,Mapper Reducer类的Jar文件存入HDFS

1.4:Client向JobTracker发出作业提交请求

2.1:JobTracker为作业进行初始化工作

2.2:JobTracker从HDFS中获取Client存放的input split数据信息

3:TaskTracker通过heartbeat向JobTracker询问有没有任务可做

4.1: Map TaskTracker将作业的Jar文件和作业的相关参数配置文件从分布式文件存储系统中取出,并复制到本地工作目录下

4.2:TaskTracker新建一个TaskRunner实例来运行此Map任务

4.3:TaskRunner将启动一个单独的JVM,并在其中启动MapTask执行用户指定的map()函数

4.4:MapTask计算获得的数据,定期存入缓存中

4.5:在缓存满了的情况下存入本地磁盘中

4.6:在任务执行时,MapTask定时与TaskTracker通信报告任务进度

5.1:JobTracker分配Reduce任务到Reduce TaskTracker节点中

5.2:同4.2

5.3:同4.3

5.4:ReduceTask从对应的Map TaskTracker节点中远程下载中间结果的数据文件

5.5:ReduceTask执行前向HDFS创建输出文件路径,执行时输出临时结果。

5.6:ReduceTask通过heartbeat向JobTracker通报任务进度,直到任务全部完成

6.1:Client异步轮询执行结果,获得执行完成通知

6.2:Client通知用户作业完成

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

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

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

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

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

  3. MapReduce06 MapReduce工作机制

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

  4. Hadoop MapReduce工作原理

    在学习Hadoop,慢慢的从使用到原理,逐层的深入吧 第一部分:MapReduce工作原理   MapReduce 角色 •Client :作业提交发起者. •JobTracker: 初始化作业,分配 ...

  5. 浅谈MapReduce工作机制

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

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

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

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

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

  8. 【转】简易剖析Hadoop作业工作机制

    原文地址:https://www.cnblogs.com/duma/p/10666269.html 建议:结合第四版Hadoop权威指南阅读,更有利于理解 运行机制 运行一个 MR 程序主要涉及以下 ...

  9. MapReduce工作机制

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

随机推荐

  1. 关于adb驱动

    Android设备(如手机)连接PC时所需要的驱动程序,一般Android设备连接WinXP是无需安装驱动的. adb的全称为Android Debug Bridge,就是起到调试桥的作用.通过adb ...

  2. Cobar_基于MySQL的分布式数据库服务中间件

    Cobar是阿里巴巴研发的关系型数据的分布式处理系统,是提供关系型数据库(MySQL)分布式服务的中间件,该产品成功替代了原先基于Oracle的数据存储方案,它可以让传统的数据库得到良好的线性扩展,并 ...

  3. 对thinkphp静态模板表单提交的理解

    看表单的提交<form action="{$Think.const.__SELF__}"  method="post">...</form&g ...

  4. Xampp 添加 SSL

    我的 XAMPP 没有找到这句话 ,直接添加 extension=php_openssl.dll  大概988行另外,需要配置 httpd-ssl.conf 文件(*\xampp\apache\con ...

  5. JSP简单访问数据库

    Java代码 public class DBHelper { private String driverName; private String url; private String user; p ...

  6. 前端编码规范(4)—— CSS 和 Sass (SCSS) 规范

    CSS and Sass (SCSS) style rules ID and class naming ID和class(类)名总是使用可以反应元素目的和用途的名称,或其他通用名称.代替表象和晦涩难懂 ...

  7. 新浪SAE数据库连接demo和说明

    <?php $con = mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS); // ...

  8. Maven 创建多模块工程

    1. 创建父项目 new -->project-->maven-->maven Project,然后下一步, 进入new maven Project的Select project n ...

  9. PHP 错误与异常 笔记与总结(18 )页面重定向实现

    在发生错误时,将用户重定向到另一个页面. <?php header('content-type:text/html; charset=utf-8'); class ExceptionRedire ...

  10. PHP 防止表单重复提交

    原理是:首先在表单页生成一个 随机不重复的 token(可以利用时间戳),把 token 的值分别存入 session 和 表单的隐藏域:当提交表单的时候,在接收页对比传递过来的 token 和ses ...