【YARN】yarn 基础知识整理——hadoop1.0与hadoop2.0区别、yarn总结
文章目录
-
1. hadoop1.0 和 hadoop2.0区别
-
-
1.1 hadoop1.0
-
- 1.1.1 HDFS
- 1.1.2 Mapreduce
-
1.2 hadoop2.0
-
- 1.2.1 HDFS
- 1.2.2 Yarn/MapReduce2
-
-
2. Yarn
-
-
2.1 Yarn(Yet Another Resource Negotiator)概述
-
2.2 Yarn的优点
-
2.3 Yarn 重要概念
-
- 2.3.1 ResourceManager
- 2.3.2 NodeManager
- 2.3.3 MRAppMaster
- 2.3.4 Container
- 2.3.5 ASM
- 2.3.6 Scheduler
-
2.4 Yarn架构及角色职责
-
2.5 Yarn 作业执行流程(概述版)
-
2.6 Yarn 作业执行流程(详细版)
-
1. hadoop1.0 和 hadoop2.0区别

1.1 hadoop1.0

1.1.1 HDFS
对HDFS来说,其主要的运行架构则是master-slave架构,即主从架构。其中呢,master主节点称之为Namenode节点,而slave从节点称为DataNode节点。
这个NameNode的职责是什么呢?
- NameNode管理着整个文件系统,负责接收用户的操作请求
- NameNode管理着整个文件系统的目录结构,所谓目录结构类似于我们Windows操作系统的体系结构
- NameNode管理着整个文件系统的元数据信息,所谓元数据信息指定是除了数据本身之外涉及到文件自身的相关信息
- NameNode保管着文件与block块序列之间的对应关系以及block块与DataNode节点之间的对应关系
在hadoop1.0中,namenode有且只有一个,虽然可以通过SecondaryNameNode与NameNode进行数据同步备份,但是总会存在一定的延时,如果NameNode挂掉,但是如果有部份数据还没有同步到SecondaryNameNode上,还是可能会存在着数据丢失的问题。
值得一提的是,在HDFS中,我们真实的数据是由DataNode来负责来存储的,但是数据具体被存储到了哪个DataNode节点等元数据信息则是由我们的NameNode来存储的。
这种架构实现的好处是简单,但其局限同样明显:
单点故障问题 :因为NameNode含有我们用户存储文件的全部的元数据信息,当我们的NameNode无法在内存中加载全部元数据信息的时候,集群的寿命就到头了。
拓展性问题 :NameNode在内存中存储了整个分布式文件系统中的元数据信息,并且NameNode只能有一台机器,无法拓展。单台机器的NameNode必然有到达极限的地方。
性能问题 :当HDFS中存储大量的小文件时,会使NameNode的内存压力增加。
隔离性问题 :单个namenode难以提供隔离性,即:某个用户提交的负载很大的job会减慢其他用户的job。
1.1.2 Mapreduce
对MapReduce来说,同样时一个主从结构,是由一个JobTracker(主)和多个TaskTracker(从)组成。
而JobTracker在hadoop1.0的MapReduce中做了很多事情,可以说当爹又当妈。
- 负责接收client提交给的计算任务。
- 负责将接收的计算任务分配给各个的TaskTracker进行执行。
- 通过heartbeat(心跳)来管理TaskTracker机器的情况,同时监控任务task的执行状况。
这个架构的缺陷:
单点故障 :依旧是单点故障问题,如果JobTracker挂掉了会导致MapReduce作业无法执行。
资源浪费 :JobTracker完成了太多的任务,造成了过多的资源消耗,当map-reduce job非常多的时候,会造成很大的内存开销,潜在来说,也增加了JobTracker失效的风险,这也是业界普遍总结出老Hadoop的Map-Reduce只能支持4000节点主机的上限;
只支持简单的MapReduce编程模型 :要使用Hadoop进行编程的话只能使用基础的MapReduce,而无法使用诸如Spark这些计算模型。并且它也不支持流式计算和实时计算。
资源利用率不高 :把资源强制划分为 Map/Reduce Slot,当只有 MapTask 时,TeduceSlot 不能用;当只有 Reduce Task 时,MapSlot 不能用,容易造成资源利用不足。
容易OOM : 在 TaskTracker 端,用 Map/Reduce Task 作为资源的表示过于简单,没有考虑到 CPU、内 存等资源情况,当把两个需要消耗大内存的 Task 调度到一起,很容易出现 OOM
1.2 hadoop2.0
Hadoop2.0比起Hadoop1.0来说,最大的改进是加入了资源调度框架Yarn,我们依旧分为HDFS和Yarn/MapReduce2.0两部分来讲述Hadoop的改进。
1.2.1 HDFS
针对Hadoop1.0中NameNode制约HDFS的扩展性问题,提出HDFSFederation以及高可用HA。此时NameNode间相互独立,也就是说它们之间不需要相互协调。且多个NameNode分管不同的目录进而实现访问隔离和横向扩展。
这样NameNode的可拓展性自然而然可用增加,据统计Hadoop2.0中最多可以达到10000个节点同时运行,并且这样的架构改进也解决了NameNode单点故障问题。
再来说说高可用(HA),HA主要指的是可以同时启动2个NameNode。其中一个处于工作(Active)状态,另一个处于随时待命(Standby)状态。这样,当一个NameNode所在的服务器宕机时,可以在数据不丢失的情况下,手工或者自动切换到另一个NameNode提供服务。
1.2.2 Yarn/MapReduce2
针对Hadoop1.0中MR的不足,引入了Yarn框架。Yarn框架中将JobTracker资源分配和作业控制分开,分为Resource Manager(RM)以及Application Master(AM)。
下边详细介绍yarn
2. Yarn
2.1 Yarn(Yet Another Resource Negotiator)概述
YARN 是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操
作系统平台,而 MapReduce 等运算程序则相当于运行于操作系统之上的应用程序
YARN 是 Hadoop2.x 版本中的一个新特性。它的出现其实是为了解决第一代 MapReduce 编程 框架的不足,提高集群环境下的资源利用率,这些资源包括内存,磁盘,网络,IO 等。Hadoop2.X 版本中重新设计的这个 YARN 集群,具有更好的扩展性,可用性,可靠性,向后兼容性,以 及能支持除 MapReduce 以外的更多分布式计算程序
- YARN 并不清楚用户提交的程序的运行机制
- YARN 只提供运算资源的调度(用户程序向 YARN 申请资源,YARN 就负责分配资源)
- YARN 中的主管角色叫 ResourceManager
- YARN 中具体提供运算资源的角色叫 NodeManager
- 这样一来,YARN 其实就与运行的用户程序完全解耦,就意味着 YARN 上可以运行各种类型的分布式运算程序(MapReduce 只是其中的一种),比如 MapReduce、Storm 程序,Spark程序,Tez …
- 所以,Spark、Storm 等运算框架都可以整合在 YARN 上运行,只要他们各自的框架中有符合 YARN 规范的资源请求机制即可
- yarn 就成为一个通用的资源调度平台,从此,企业中以前存在的各种运算集群都可以整 合在一个物理集群上,提高资源利用率,方便数据共享
2.2 Yarn的优点
- YARN/MRv2 最基本的想法是将原 JobTracker 主要的资源管理和 Job 调度/监视功能分开作为两个单独的守护进程。
- 有一个全局的 ResourceManager(RM)和每个 Application 有一个 ApplicationMaster(AM),Application 相当于 MapReduce Job 或者 DAG jobs。
- ResourceManager 和 NodeManager(NM)组成了基本的数据计算框架。ResourceManager 协调集群的资源利用, 任何 Client 或者运行着的 applicatitonMaster 想要运行 Job 或者 Task 都得向 RM 申请一定的资源。
- ApplicatonMaster 是一个框架特殊的库,对于 MapReduce 框架而言有它自己的 AM 实现, 用户也可以实现自己的 AM,在运行的时候,AM 会与 NM 一起来启动和监视 Tasks。
2.3 Yarn 重要概念
2.3.1 ResourceManager
ResourceManager 是基于应用程序对集群资源的需求进行调度的 YARN 集群主控节点,负责 协调和管理整个集群(所有 NodeManager)的资源,响应用户提交的不同类型应用程序的 解析,调度,监控等工作。ResourceManager 会为每一个 Application 启动一个 MRAppMaster, 并且 MRAppMaster 分散在各个 NodeManager 节点
它主要由两个组件构成:调度器(Scheduler) 和 应用程序管理器(ApplicationsManager, ASM)
YARN 集群的主节点 ResourceManager 的职责:
- 处理客户端请求
- 启动或监控 MRAppMaster
- 监控 NodeManager
- 资源的分配与调度
2.3.2 NodeManager
NodeManager 是 YARN 集群当中真正资源的提供者,是真正执行应用程序的容器的提供者, 监控应用程序的资源使用情况(CPU,内存,硬盘,网络),并通过心跳向集群资源调度器 ResourceManager 进行汇报以更新自己的健康状态。同时其也会监督 Container 的生命周期 管理,监控每个 Container 的资源使用(内存、CPU 等)情况,追踪节点健康状况,管理日 志和不同应用程序用到的附属服务(auxiliary service)。
YARN 集群的从节点 NodeManager 的职责:
- 管理单个节点上的资源
- 处理来自 ResourceManager 的命令
- 处理来自 MRAppMaster 的命令
2.3.3 MRAppMaster
MRAppMaster 对应一个应用程序,职责是:向资源调度器申请执行任务的资源容器,运行
任务,监控整个任务的执行,跟踪整个任务的状态,处理任务失败以异常情况
MRAppMaster也就是每一个job的老大:
- 负责启动maptask任务和reducetask任务
- 负责帮助maptask reducetask向yarn(resourcemanager)申请资源
- 负责监控maptask或reducetask的运行状态和进度
- 负责maptask或reducetask的失败重启
2.3.4 Container
Container 容器是一个抽象出来的逻辑资源单位。容器是由 ResourceManager Scheduler 服务 动态分配的资源构成,它包括了该节点上的一定量 CPU,内存,磁盘,网络等信息,MapReduce 程序的所有 Task 都是在一个容器里执行完成的,一个container对应一个yarnchild进程,容器的大小是可以动态调整的
2.3.5 ASM
应用程序管理器 ASM 负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动 MRAppMaster、监控 MRAppMaster 运行状态并在失败时重新启动它等
2.3.6 Scheduler
调度器根据应用程序的资源需求进行资源分配,不参与应用程序具体的执行和监控等工作 资源分配的单位就是 Container,调度器是一个可插拔的组件,用户可以根据自己的需求实 现自己的调度器。YARN 本身为我们提供了多种直接可用的调度器,比如 FIFO,Fair Scheduler 和 Capacity Scheduler 等
2.4 Yarn架构及角色职责

2.5 Yarn 作业执行流程(概述版)

- 客户端向rm发送提交job的命令
- RM会为该job分配一个节点,并在该节点启动MRappmaster
- 这个节点会先启动一个container,然后在这个container中启动MRappmaster
- MRappmaster向RM申请资源,启动maptask、reducetask
- RM向MRapppmaster返回maptask/reducetask的对应节点(优先数据本地化、同机架、同机房)
- 在上一步返回的对应节点启动maptask
- 在上一步启动的maptask有一个执行完时,开始启动reducetask
- maptask reducetask向MRappmaster汇报运行进度和状态,当maptask/reducetask运行完成时,对应资源被回收。
- MRappmaster向RM汇报,并注销自己
2.6 Yarn 作业执行流程(详细版)

-
客户端向RM发送job提交请求
-
RM向当前客户端返回一个applicationId(application_时间戳_Id)和共享资源(jar、split、job.xml)
-
客户端将共享资源放在共享资源路径下
/tmp/hadoop-yarn/staging/hadoop/.staging/job_1544520115116_004 -
客户端向RM发送响应,告知共享资源放置完成,并开始真正提交Job
-
RM会为当前job分配一个nodemanager,并在该节点启动MRappmaster
-
先在上一步指定的节点启一个Container,再启动MRappmaster
-
MRappmaster会初始化这个job的工作簿(记录maptask、reducetask工作进度的)
-
MRappmaster会在共享资源路径下载共享资源
-
MRappmaster向RM申请资源运行maptask和reducetask(优先提交maptask的资源申请)
-
RM向MRappmaster返回对应资源节点(数据本地化原则)
-
MRappmaster到对应节点先启动Container(再启动maptask)
-
maptask任务到共享资源路径下载共享资源
-
运行maptask任务
-
maptask向MRappmaster汇报自己的进度和状态
-
当MRappmaster获取到有一个maptask完成时,到对应节点优先启动Container(启动reducetask),开始进行数据的fetch
-
reducetask到对应的共享资源路径下载共享资源
-
执行reducetask
-
reducetask运行过程向MRappmaster汇报自己的进度和状态
-
MRappmaster获取到maptask或reducetask任务运行完成时,到对应节点上销毁资源(container)
-
MRappmaster向RM汇报运行完成,并注销自己。
参考链接:
hadoop1.0与hadoop2.0区别
https://www.cnblogs.com/listenfwind/p/10121817.html
