MapReduce是Hadoop2.x的一个计算框架,利用分治的思想,将一个计算量很大的作业分给很多个任务,每个任务完成其中的一小部分,然后再将结果合并到一起。将任务分开处理的过程为map阶段,将每个小任务的结果合并到一起的过程为reduce阶段。下面先从宏观上介绍一下客户端提交一个作业时,Hadoop2.x各个组件之间的联系及处理流程。然后我们再具体看看MapReduce计算框架在执行一个作业时,做了些什么。

YARN

YARN是Hadoop2.x框架下的资源管理系统,其组成部分为:

1)全局资源管理器(global resource manager):整个系统的资源管理和调配。

2)节点管理器(node manager)(每个节点都有一个)负责任务的启动、配置及其资源的监控

3)针对每个应用程序的应用程序管理器(application-specific application master)(因为Hadoop2.x支持的计算框架有很多,不只是MapReduce,还有像storm、spark、Tez不同处理机制的计算框架,所以MapReduce是一种应用程序,每个MapReduce作业是MapReduce类型程序的一个实例)

4)调度器(scheduler)(在资源管理器里)

5)容器(container):一部分CPU和内存组成一个容器,最为资源使用,一个应用程序运行在一组容器中。

在了解了各个组件的功能之后,借助下图,我们看一下提交一个作业的流程:

  

1)客户端向资源管理器提交作业程序,作业程序的类型决定了使用哪种应用程序管理器(MapReduce、storm、Tez...)

2)资源管理器协调资源,在一个节点上获取一个运行应用程序管理器实例的容器

3)应用程序管理器(application master)在资源管理器中注册

4)应用程序管理器通过资源请求与资源管理器协商资源,包括该容器所在的节点和该容器的详细说明(CPU核数量和内存大小)

5)和 6)应用程序管理器在一个节点上或者多个节点上运行其Map Task和Reduce Task

7)在容器中运行的应用程序向应用程序管理器汇报执行度

8)应用程序执行完毕,应用程序管理器就会从资源管理器中取消注册,作业占用的资源会释放到系统中

MapReduce计算框架

MapReduce总的可以分为map阶段、shuffle阶段和reduce阶段。

map阶段

1)从HDFS中将输入值传输到Mapper节点

除了传输之外,在读取过程中,还需要做一个转换过程,将数据转换为键值对的形式(MapReduce处理的输入必须为键值对的形式),这个过程通过InputFormat完成(默认为TextInputFormat

2)Mapper

根据自己写的Mapper函数对文件进行处理,同样输出的是键值对(如wordcount中统计收到的数据中每个词出现的次数)

3)Partitioner

Patitioner根据Reducer的数量和自定义的划分方法(没有自定义的话,Hadoop有默认实现)去划分Mapper的输出;划分的结果会按照Mapper输出的键进行排序。

4)Combiner(这一步是可选的)

经过Partitioner排序后,如果作业中配置了Combiner,就会调用Combiner,Combiner就好像在Mapper端提前进行一下Reducer一样。

那为什么要提前进行呢?这是为了尽量减少对网络带宽的需求,比如经典的wordcount程序,在Mapper端处理之后,我们可能得到一个像key = apple,value = {1,1,1,1,1,1}的结果,如果我们能先对其进行一下Combiner,那么就能得到key = apple,value = 6的结果,传输这样的数据,肯定是要比key = apple,value = {1,1,1,1,1,1}的数据节省带宽的。

那既然能够节省传输带宽,为什么又是可选的呢?何不每次都默认执行Combiner?这是因为并不是每一个Mapper都能进行Combiner;比如现在我们的任务要统计一段时间内的每天的最高气温,假设开始有两个Mapper,输出为(0,10,20)和(15,25),那么提前进行Combiner可以使得传递给Reducer端的数据为(20, 25)这样最后的结果还是为25,且传输的数据量变小;但是假如我们要求一段时间内的平均温度呢?如果开始就在Mapper端进行Combiner求平均温度,那么Reducer端得到的数据为(10, 20),算出的平均温度为15,但是实际上的平均温度为(0, 10, 20 , 15 ,25)的平均,为14;所以需要搞清楚Combiner合适不合适提前进行。

shuffle阶段

shuffle阶段要做的事就是保证Mapper输出的数据传输到合适的Reducer进行处理,如下图所示:

shuffle阶段,每个Reducer都会使用HTTP协议从Mapper节点获得自己的划分(Reducer通过Application Master来获取自己应该查询哪些Mapper节点来获取自己划分的信息,因为每个Mapper实例完成后,会通知Application Master运行阶段产生的划分)

reduce阶段

1)Reducer

根据自己写的reduce程序对数据进行处理(如wordcount中将每个单词出现的次数加起来得到总和)

2)将处理结果输出到HDFS

通过OutputFormat完成(默认是TextOutputFormat

总结

通过对Hadoop2.x框架的处理流程和MapReduce计算框架的处理流程的梳理,可以在进行程序编写时有一个更清楚的认识,下一步应该具体做些什么。

参考:《Hadoop权威指南》

    《Hadoop技术内幕》

MapReduce处理流程的更多相关文章

  1. MapReduce基本流程与设计思想初步

    1.MapReduce是什么? MapReduce是一种编程模型,用于大规模数据集的并行运算.它借用了函数式的编程概念,是Google发明的一种数据处理模型. 主要思想为:Map(映射)和Reduce ...

  2. MapReduce工作流程及Shuffle原理概述

    引言: 虽然MapReduce计算框架简化了分布式程序设计,将所有的并行程序均需要关注的设计细节抽象成公共模块并交由系统实现,用户只需关注自己的应用程序的逻辑实现,提高了开发效率,但是开发如果对Map ...

  3. mapreduce执行流程

    角色描述:JobClient:执行任务的客户端JobTracker:任务调度器TaskTracker:任务跟踪器Task:具体的任务(Map OR Reduce) 从生命周期的角度来看,mapredu ...

  4. MapReduce运行流程分析

    研究MapReduce已经有一段时间了.起初是从分析WordCount程序开始,后来开始阅读Hadoop源码,自认为已经看清MapReduce的运行流程.现在把自己的理解贴出来,与大家分享,欢迎纠错. ...

  5. MapReduce执行流程及程序编写

    MapReduce 一种分布式计算模型,解决海量数据的计算问题,MapReduce将计算过程抽象成两个函数 Map(映射):对一些独立元素(拆分后的小块)组成的列表的每一个元素进行指定的操作,可以高度 ...

  6. 辅助排序和Mapreduce整体流程

    一.辅助排序 需求:先有一个订单数据文件,包含了订单id.商品id.商品价格,要求将订单id正序,商品价格倒序,且生成结果文件个数为订单id的数量,每个结果文件中只要一条该订单最贵商品的数据. 思路: ...

  7. Hadoop Mapreduce运行流程

    Mapreduce的运算过程为两个阶段: 第一个阶段的map task相互独立,完全并行: 第二个阶段的reduce task也是相互独立,但依赖于上一阶段所有map task并发实例的输出: 这些t ...

  8. 016_笼统概述MapReduce执行流程结合wordcount程序

    数据传输<key,value>     File-->  <key,value>  -->map(key,value)  --> mapResult<k ...

  9. 2.25-2.26 MapReduce执行流程Shuffle讲解

    原文链接:https://langyu.iteye.com/blog/992916 Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方.要想理解MapReduce, Shuffle是 ...

随机推荐

  1. Javascript基础 - js中曾经忽略的知识点

    深入那些曾经忽略的Javascript知识 1. parseInt(string, [radix]),parseFloat(string) 一般我们省略第二个参数,parseInt(‘100’) == ...

  2. Laravel的console使用方法

    适用场景:分析数据(日志) php artisan make:console 你的命令类名 示例: php artisan make:console Check 在\app\Console\Comma ...

  3. 使用Compute Shader加速Irradiance Environment Map的计算

    Irradiance Environment Map基本原理 Irradiance Environment Map(也叫Irradiance Map或Diffuse Environment Map), ...

  4. Spring总结_04_容器和bean

     一.概念理解 1.容器 IoC容器负责容纳并管理bean,在Spring中,BeanFactory是IoC容器的核心接口. 它的职责包括:实例化.定位.配置应用程序中的对象及建立这些对象间的依赖. ...

  5. 有关ospf抓包

    有关ospf抓包 1.相关的路由器为这样子的: 路由器都运行了ospf: 抓包的链路为GE0/0/2 , 2.抓包图: 从图上我们可以看到,protocol info 这一栏里面出现了: hello ...

  6. WCF请求数据:已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定元素上的 MaxReceivedMessageSize 属性。

    通常情况下,写好WCF服务后都会用自带的WCFClient工具进行测试,在进行时数据请求的时候,如果返回数据量超过默认接收值的时候就会提示如图异常错误. 错误也提示的很清楚,无非就是修改接收值大小的问 ...

  7. Android Handler消息机制不完全解析

    1.Handler的作用 Android开发中,我们经常使用Handler进行页面的更新.例如我们需要在一个下载任务完成后,去更新我们的UI效果,因为AndroidUI操作不是线程安全的,也就意味着我 ...

  8. 1-PHP基本概念

    PHP 概念:服务器脚本语言 静态网站:不支持交互的网站(html) 动态网站:支持数据交互的网站 实现动态网站的技术 实现技术 网站后缀 ASP .asp PHP .php .NET .aspx J ...

  9. 隐性URL与显性URL区别与SEO考虑

    隐性URL与显性URL经常在实现页面跳转的时候用到,这两种方式有什么区别,各自对SEO有什么影响?看一下阿里云的官方文档解释: 显性URL转发: 例如: http://b.com/ 指向 http:/ ...

  10. 文件上传组件FileUpload 以及邮箱搭建JavaMail

     文件上传与下载 1.1 文件上传 案例: 注册表单/保存商品等相关模块! --à 注册选择头像 / 商品图片 (数据库:存储图片路径 / 图片保存到服务器中指定的目录) 文件上传,要点: 前台: 1 ...