MapReduce

MapReduce

什么是MapReduce(分布式计算系统)?

mapreduce是一种分布式运算程序的编程模型,用于大规模数据集(大于1TB)的并行运算。必须构建在hdfs之上,一种大数据离线计算框架

概念

MR有两个阶段组成:Map和Reduce,用户只需实现map()和reduce()两个函数,即可实现分布式计算。

map–>映射(key value)

reduce–>归纳

核心功能

核心功能是将用户编写的业务逻辑代码自带默认组件整合成一个完整的 分布式运算程序,并发运行在一个 hadoop 集群上

为什么需要mapreduce ?

(1) 海量数据在单机上处理因为硬件资源限制,无法胜任

(2) 而一旦将单机版程序扩展到集群来分布式运行,将极大增加程序的复杂度和开发难度

(3) 引入 MapReduce 框架后,开发人员可以将绝大部分工作集中在业务逻辑的开发上,而将 分布式计算中的复杂性交由框架来处理

mapreduce程序运行实例

在 MapReduce 组件里, 非常有名的就是 wordcount 和 pi 程序这是官方提供。这些 MapReduce 程序的代码都在 hadoop-mapreduce-examples-2.6.4.jar 包里, 这 个 jar 包在 hadoop 安装目录下的/share/hadoop/mapreduce/目录里

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

MapReduce架构

MapReduce1.x

在这里插入图片描述

JobTracker与namenode的区别

计算任务找JobTracker

存储任务找namenode

JobTracker

接受客户端的mr任务

选择一个资源丰富的,执行对应的任务

并且给这个任务分配资源

与TaskTracker保持心跳,接受汇报信息

TaskTracker

保持心跳,汇报资源

当前机器内存,当前机器任务数

当分配资源之后,开始在本机分配对应的资源给Task

并且实时监控任务的执行,并汇报

Slot(槽)

属于JobTracker分配的资源

计算能力,IO能力…

不管任务大小,资源是恒定的,不灵活但是好管理

Task(MapTask–ReduceTask)
在这里插入图片描述

task分成maptask 和reducetask

在这里插入图片描述

开始按照MR的流程执行业务

当任务完成时,JobTracker告诉TaskTracker回收资源

缺点:

单点故障(jobTracker只有一个)

内存扩展

业务瓶颈

只能执行MR的操作

如果其他框架需要运行在Hadoop上,需要独立开发自己的资源调度框架

MapReduce2.x
在这里插入图片描述

2.x开始使用Yarn(Yet Another Resource Negotiator,另一种资源协调者)统一管理资源

以后其他的计算框架可以直接访问yarn获取当前集群的空闲节点

Container(容器)

2.x资源的代名词

Container动态分配的

ResourceManager

资源协调框架的管理者

分为主节点和备用节点(防止单点故障)

主备的切换基于Zookeeper进行管理

时刻与NodeManager保持心跳,接受NodeManager的汇报

NodeManager汇报当前节点的资源情况

当有外部框架要使用资源的时候直接访问ResourceManager即可

如果有MR任务,先去ResourceManager申请资源,ResourceManager根据汇报相对灵活分配资源

资源在NodeManager1,NodeManager1要负责开辟资源

资源协调框架的管理者

分为主节点和备用节点(防止单点故障)

主备的切换基于Zookeeper进行管理

时刻与NodeManager保持心跳,接受NodeManager的汇报

NodeManager汇报当前节点的资源情况

当有外部框架要使用资源的时候直接访问ResourceManager即可

如果有MR任务,先去ResourceManager申请资源,ResourceManager根据汇报相对灵活分配资源

资源在NodeManager1,NodeManager1要负责开辟资源

NodeManager

Yet Another Resource Negotiator(另一种资源协调者)

资源协调框架的执行者

每一个DataNode上默认有一个NodeManager

NodeManager汇报自己的信息到ResourceManag

ApplicationMaster

我们本次JOB任务的主导者

负责调度本次被分配的资源Container

当所有的节点任务全部完成,application告诉ResourceManager请求杀死当前ApplicationMaster线程

本次任务所有的资源都会被释放

在这里插入图片描述

MR的计算流程

MapTask

https://www.edrawsoft.cn/viewer/public/s/max/eacdf644540127

1. map task读取HDFS文件。每个block(128M),启动一个map task。每个map task按照行读取一个block中的内容,对每一行执行map函数

2. map函数对输入的数据(block—>split)进行拆分,拆分成一个个键值对<a, 1> <b,1>

3.再利用环形数据缓冲区去像硬盘传递数据(溢写Spill)

4.在溢写过程中先分区(Partation)再排序(Sort),每个分区对应1个reduce task

4.对每个分区中的数据,按照key进行分组并排序(相同分区在一起,相同Key的在一起)

在map段执行合并Merge合并成一个有序的大文件(分区0 分区1…)

reduceTask

https://www.edrawsoft.cn/viewer/public/s/max/b7ed5235951037

0. 将Map的临时结果拉取 Fetch到 Reduce节点

1.每个分区对应一个reduce task,这个reduce task会读取相同分区的map输出;reduce task对接收到的所有map输出,进行排序分组<a,{0}><b,{0}>…

2.执行reduce 操作,对一个分组中的value进行累加<c,1><a,0><b,0>

3.每个分区输出到一个HDFS文件中 part 0 part 1 …
.每个分区对应一个reduce task,这个reduce task会读取相同分区的map输出;reduce task对接收到的所有map输出,进行排序分组<a,{0}><b,{0}>…

2.执行reduce 操作,对一个分组中的value进行累加<c,1><a,0><b,0>

3.每个分区输出到一个HDFS文件中 part 0 part 1 …

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页