MapReduce的工作原理

Stella981
• 阅读 676

MapReduce简介

MapReduce是一种并行可扩展计算模型,并且有较好的容错性,主要解决海量离线数据的批处理。实现下面目标

★ 易于编程

★ 良好的扩展性

★ 高容错性

MapReduce有哪些角色?各自的作用是什么?

MapReduce由JobTracker和TaskTracker组成。JobTracker负责资源管理和作业控制,TaskTracker负责任务的运行。

MapReduce程序执行流程

程序执行流程图如下:

  MapReduce的工作原理

(1) 开发人员编写好MapReduce program,将程序打包运行。

(2) JobClient向JobTracker申请可用Job,JobTracker返回JobClient一个可用Job ID。

(3) JobClient得到Job ID后,将运行Job所需要的资源拷贝到共享文件系统HDFS中。

(4) 资源准备完备后,JobClient向JobTracker提交Job。

(5) JobTracker收到提交的Job后,初始化Job。

(6) 初始化完成后,JobTracker从HDFS中获取输入splits(作业可以该启动多少Mapper任务)。

(7) 与此同时,TaskTracker不断地向JobTracker汇报心跳信息,并且返回要执行的任务。

(8) TaskTracker得到JobTracker分配(尽量满足数据本地化)的任务后,向HDFS获取Job资源(若数据是本地的,不需拷贝数据)。

(9) 获取资源后,TaskTracker会开启JVM子进程运行任务。

注:

(3)中资源具体指什么?主要包含:

    ● 程序jar包、作业配置文件xml

    ● 输入划分信息,决定作业该启动多少个map任务

    ● 本地文件,包含依赖的第三方jar包(-libjars)、依赖的归档文件(-archives)和普通文件(-files),如果已经上传,则不需上传

MapReduce工作原理

工作原理图如下:

MapReduce的工作原理

map task

程序会根据InputFormat将输入文件分割成splits,每个split会作为一个map task的输入,每个map task会有一个内存缓冲区,

输入数据经过map阶段处理后的中间结果会写入内存缓冲区,并且决定数据写入到哪个partitioner,当写入的数据到达内存缓冲

区的的阀值(默认是0.8),会启动一个线程将内存中的数据溢写入磁盘,同时不影响map中间结果继续写入缓冲区。在溢写过程中,

MapReduce框架会对key进行排序,如果中间结果比较大,会形成多个溢写文件,最后的缓冲区数据也会全部溢写入磁盘形成一个溢写

文件(最少有一个溢写文件),如果是多个溢写文件,则最后合并所有的溢写文件为一个文件。

reduce task

当所有的map task完成后,每个map task会形成一个最终文件,并且该文件按区划分。reduce任务启动之前,一个map task完成后,

就会启动线程来拉取map结果数据到相应的reduce task,不断地合并数据,为reduce的数据输入做准备,当所有的map tesk完成后,

数据也拉取合并完毕后,reduce task 启动,最终将输出输出结果存入HDFS上。

MapReduce中Shuffle过程

Shuffle的过程:描述数据从map task输出到reduce task输入的这段过程。

我们对Shuffle过程的期望是:

★ 完整地从map task端拉取数据到reduce task端 

★ 跨界点拉取数据时,尽量减少对带宽的不必要消耗

★ 减小磁盘IO对task执行的影响

先看map端:

MapReduce的工作原理

split被送入map task后,程序库决定数据结果数据属于哪个partitioner,写入到内存缓冲区,到达阀值,开启溢写过程,进行key排序,

如果有combiner步骤,则会对相同的key做归并处理,最终多个溢写文件合并为一个文件。

再看reduce端:

MapReduce的工作原理

多个map task形成的最终文件的对应partitioner会被对应的reduce task拉取至内存缓冲区,对可能形成多个溢写文件合并,最终

作为resuce task的数据输入 。

MapReduce编程主要组件

InputFormat类:分割成多个splits和每行怎么解析。   

Mapper类:对输入的每对<key,value>生成中间结果。

Combiner类:在map端,对相同的key进行合并。

Partitioner类:在shuffle过程中,将按照key值将中间结果分为R份,每一份都由一个reduce去完成。

Reducer类:对所有的map中间结果,进行合并。

OutputFormat类:负责输出结果格式。

编程框架如下:

  MapReduce的工作原理

针对MapReduce的缺点,YARN解决了什么?

MapReduce由以下缺点:

★ JobTracker挂掉,整个作业挂掉,存在单点故障

★ JobTracker既负责资源管理又负责作业控制,当作业增多时,JobTracker内存是扩展的瓶颈

★ map task全部完成后才能执行reduce task,造成资源空闲浪费

YARN设计考虑以上缺点,对MapReduce重新设计:

★ 将JobTracker职责分离,ResouceManager全局资源管理,ApplicationMaster管理作业的调度

★ 对ResouceManager做了HA设计

★ 设计了更细粒度的抽象资源容器Container

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
MapReduce编程模型和计算框架架构原理
Hadoop解决大规模数据分布式计算的方案是MapReduce。MapReduce既是一个编程模型,又是一个计算框架。也就是说,开发人员必须基于MapReduce编程模型进行编程开发,然后将程序通过MapReduce计算框架分发到Hadoop集群中运行。我们先看一下作为编程模型的MapReduce。MapReduce编程模型
Stella981 Stella981
3年前
MapReduce 基本原理(MP用于分布式计算)
hadoop最主要的2个基本的内容要了解。上次了解了一下HDFS,本章节主要是了解了MapReduce的一些基本原理。MapReduce文件系统:它是一种编程模型,用于大规模数据集(大于1TB)的并行运算。MapReduce将分为两个部分:Map(映射)和Reduce(归约)。当你向mapreduce框架提交一个计算作业,它会首先把计算作业分成若干个
Stella981 Stella981
3年前
MapReduce原理和WordCount数据详细过程
1.MapReduce原理 1.1MapReduce简介     MapReduce是一种分布式计算模型,是Google提出的,主要用于搜索领域,解决海量数据的计算问题。   MR有两个阶段组成:Map和Reduce,用户只需实现map()和reduce()两个函数,即可实现分布
Stella981 Stella981
3年前
Hive和HBase有哪些区别与联系及适用场景
hiveHive是运行在Hadoop上的一个工具,准确地讲是一个搜索工具。当对海量数据进行搜索时,Hadoop的计算引擎是MapReduce。但是对MapReduce的操作和编程是非常复杂的。于是Hive的存在就让复杂的编程过程简化成了用SQL语言对海量数据的操作。这大大减轻了程序员的工作量。可以说,Hive的存在让海量数据的增删改查更加方便。
Stella981 Stella981
3年前
Hadoop之Mapreduce详解
1、什么是Mapreduce   Mapreduce是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析应用”的核心框架;Mapreduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个hadoop集群上;2、Mapreduce框架结构及核心运行机制
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
Hadoop技术原理总结
Hadoop技术原理总结1、Hadoop运行原理Hadoop是一个开源的可运行于大规模集群上的分布式并行编程框架,其最核心的设计包括:MapReduce和HDFS。基于Hadoop,你可以轻松地编写可处理海量数据的分布式并行程序,并将其运行于由成百上千个结点组成的大规模计算机集群上。基于MapReduce计算模型编写分布式并行程序相对简单,
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这