hadoop的组件yarn

hadoop的组件yarn

YARN分布式资源管理框架:

hadoop1.0

在这里插入图片描述
在这里插入图片描述
hadoop2.0
在这里插入图片描述
在这里插入图片描述
Scheduler :调度器(容量调度,公平调度。FIFO)

container:资源容器(抽象概念)

ApplicationsManager(job-submissions)

negotion the frist container for executing the application spectify ApplicationMaster(4次重启(容错),单个任务的管理者,资源申请者,追踪状态,监控任务)

resourcemanager:源码

resourcemanager:nodemanager:心跳告诉resourcemanager资源汇报

nodemanager:负责当前节点的资源,接受appmaster resourcemanager的信息,resourcemanager资源汇报

appmaster:申请资源

container:资源抽象 1个切片 在nodemanager

10%冗余(一个片最多容纳148M数据)

scheduler:

applicationsManager

YARN的通信协议rpc

yarn:

resourcemanager

applicationmanager

applicationmaster(4次分配)

切片对应一个maptask container(资源容器)

reducetask

reduce的数量是由分区决定的

nodemanager

yarn的基本思想是将资源管理和作业调度/监视功能划分为单独的守护进程。其思想是拥有一个全局ResourceManager (RM)和每个应用程序的ApplicationMaster (AM)。应用程序可以是单个作业,也可以是一组作业

ResourceManager和NodeManager构成数据计算框架。ResourceManager是在系统中的所有应用程序之间仲裁资源的最终权威。NodeManager是每台机器的框架代理,负责监视容器的资源使用情况(cpu、内存、磁盘、网络),并向ResourceManager/Scheduler报告相同的情况

每个应用程序ApplicationMaster实际上是一个特定于框架的库,它的任务是与ResourceManager协商资源,并与NodeManager一起执行和监视任务

yarn的提交job的流程

在这里插入图片描述

ResourceMangager:管理nodemanger ,管理全局的资源,

Appmaster:对作业的调度做一个追踪,作业的老大
Container:虚拟的管理资源,cpu ,内存,磁盘等。

[外链图片转存失败(img-rfIIS95l-1568966471715)(1568966453289.png)]

1、基本架构

(1)组成:YARN 主要由 ResourceManager、NodeManager、ApplicationMaster 和 Container 等组件构成

(2)ResourceManager作用

1)处理客户端请求

2)监控NodeManager

3)启动或监控ApplicationMaster

4)资源的分配与调度

(3)NodeManager作用

1)管理单个节点上的资源

2)处理来自ResourceManager的命令

3)处理来自ApplicationMaster的命令

(4)ApplicationMaster 作用

1)负责数据的切分

2)为应用程序申请资源并分配给内部的任务

3)任务的监控与容错

(5)Container :Container是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等。

解析:

第一步:客户端机器,提交作业的机器,查看自己的yarn-site.xml里的yarn-resourceManager.hostname,与ResourceManager通信,用的是RPC的方式。

1.首先客户端机器(程序提交的机器,yarn 的客户端程序)向ResourceMangaer提出申请运行一个mr的job

2.Resourcemanager接收到请求之后,给客户端返回一个jobid,以及提交资源用的stagingdir的文件hdfs://xue01/tmp/hadoop-yarn/stagingdir

3.客户端收到消息后,开始向hdfs://xue01/tmp/hadoop-yarn/stagingdi下提交mr程序的相关资源文件包括

(a)job.jar (b)job.conf(里面有各种组件的配置信息) ©job.split (任务的切片信息)

4.然后客户端再次通知resourceManager,job的资源文件提交完毕

5.RM将用户的请求打包为task,放置调度队列,根据当前yarn的调度模式进行调度(YARN提供的三种任务调度策:FIFO Scheduler,Capacity Scheduler 和 Fair Scheduler)。

6.客户端资源文件提交完毕,向RM申请运行applicationMaster(后续简称AM)。

7.然后ResourceManager得到请求,找了一台nodeManager让它开启开启AppMaster

8.那台nodemanager 在resoucemanger的任务队列中获取到任务task,创建了contianer容器启动Appmaster,然后去hdfs://xue01/tmp/hadoop-yarn/stagingdir下载资源文件

9.Appmaster再向Resourecmanager申请Maptask运算的资源(就是其他节点上运行任务的container)

10.RM将请求再打包为task放置调度队列

11.其它nodeManger获取到maptask后会再创建contianer容器并去hdfs://xue01/tmp/hadoop-yarn/stagingdir下载资源文件,contianer中的mapTask任务由AM负责监控和调度。

12.Appmaster向maptask(就是nodemanager开启的container)发送程序启动命令,

13.除了有Appmaster外的,contianer运行mapTask

14.当各节点mapTask运行完毕后,Appmaster再向ResourceManager申请运行reduceTask容器,resourcemanager将请求再打包为task放置调度队列。

15.其它NM获取到task后会再创建contianer容器并下载资源文件,contianer中的reduceTask任务由AM负责监控和调度。

16.Appmaster向reducetask(就是nodemanager开启的container)发送程序启动命令,先去maptask执行完放结果的地方拉取属于自己的数据,然后再进行运算

17.程序运行完成后,AM向RM注销自己。让RM回收所有的资源。

切片:

(client来执行、inputformat---->getspilts()–>不同输入文件有不同的实现)

10%冗余(文本类型)

数据库中(大概130行一个分片)

查找数据类型:

文件类型:

数据库:

压缩 文件(不可切割的文件)直接添加片

查看源码创建分片信息的集合splits,用于存放分片信息

遍历目录下文件

FileInputFormat.setInputDirRecursive(job,true);//递归遍历

循环取出每一个文件,然后做如下操作

获取文件大小及位置

计算每个分片的大小

FileInputFormat.setMaxInputSplitSize(job,100);
FileInputFormat.setMinInputSplitSize(job,1);
long minSize = Math.max(getFormatMinSplitSize()//1
                        , getMinSplitSize(job));//配置文件中可设置
long maxSize = getMaxSplitSize(job);//可在运行时指定-D mapreduce.input.fileinputformat.split.maxsize=300M,默认是long的最大值
long splitSize = computeSplitSize(blockSize, minSize, maxSize);
return Math.max(minSize, Math.min(maxSize, blockSize));

判断文件是否可以分片(压缩格式有的可以进行分片,有的不可以,)

剩余文件的大小/分片大小>1.1时,循环执行封装分片信息的方法,具体如下

封装一个分片信息(包含文件的路径,分片的起始偏移量,要处理的大小,分片包含的块的信息,分片中包含的块存在哪儿些机器上)

剩余文件的大小/分片大小<=1.1且 不等于0时,封装一个分片信息(包含文件的路径,分片的起始偏移量,要处理的大小,分片包含的块的信息,分片中包含的块存在哪儿些机器上)

分片的注意事项:1.1倍的冗余。260M文件分几个片?

考虑Hadoop应用处理的数据集比较大,因此需要借助压缩。按照效率从高到低排列的
(1)使用容器格式文件,例如:顺序文件、RCFile、Avro数据格式支持压缩和切分文件。另外在配合使用一些快速压缩工具,例如:LZO、LZ4或者Snappy.
(2)使用支持切分压缩格式,例如gzip2
(3)在应用中将文件切分成块,对每块进行任意格式压缩。这种情况确保压缩后的数据库接近HDFS块大小。
(4)存储未压缩文件,以原始文件存储。

读取分片的细节:如果有多个分片

  • 第一个分片读到末尾再多读一行
  • 既不是第一个分片也不是最后一个分片第一行数据舍弃,末尾多读一行
  • 最后一个分片舍弃第一行,末尾多读一行

client appmaster

MapReduce: setup仅在map函数执行之前执行一次(适用于初始化和表头)

map阶段求总人数(传递,跨节点传递 )

后的数据库接近HDFS块大小。
(4)存储未压缩文件,以原始文件存储。


读取分片的细节:如果有多个分片

- 第一个分片读到末尾再多读一行
- 既不是第一个分片也不是最后一个分片第一行数据舍弃,末尾多读一行
- 最后一个分片舍弃第一行,末尾多读一行



client appmaster

MapReduce: setup仅在map函数执行之前执行一次(适用于初始化和表头) 

map阶段求总人数(传递,跨节点传递 )

cleanup仅在所有map函数执行之后执行一次(适用于关闭对象,关闭流)
发布了44 篇原创文章 · 获赞 7 · 访问量 2164

猜你喜欢

转载自blog.csdn.net/weixin_44273391/article/details/101063859
今日推荐