Hadoop-yarn架构解析

说明

了解Yarn架构之前,先要了解两个概念。 作业。也可称为应用程序,包含一个或多个任务。 任务。在运行MapReduce时,一个任务可以是一个Mapper或一个Reducer。

Yarn关键组件[1]

Hadoop-yarn架构解析Hadoop-yarn架构解析
Yarn组件

ResourceManager

ResourceManager由两个关键组件Scheduler和ApplicationsManager组成。

Scheduler

Scheduler在容量和队列限制范围内负责为运行的容器分配资源。Scheduler是一个纯调度器(pure scheduler),只负责调度,它不会监视或跟踪应用程序的状态,也不负责重启失败任务,这些全都交给ApplicationMaster完成。Scheduler根据各个应用程序的资源需求进行资源分配。

ApplicationsManager

ApplicationManager负责接收作业的提交,然后启动一个ApplicationMaster容器负责该应用。它也会在ApplicationMaster容器失败时,重新启动ApplicationMaster容器。

NodeManager

Hadoop 2集群中的每个DataNode都会运行一个NodeManager来执行Yarn的功能。每个节点上的NodeManager执行以下功能:

  • 定时向ResourceManager汇报本节点资源使用情况和各个Container的运行状况
  • 监督应用程序容器的生命周期
  • (监控资源)监控、管理和提供容器消耗的有关资源(CPU/内存)的信息
  • (监控资源使用情况)
  • (监控容器)监控容器的资源使用情况,杀死失去控制的程序
  • (启动/停止容器)接受并处理来自ApplicationMaster的Container启动/停止等各种请求。

ApplicationMaster

提交到Yarn上的每一个应用都有一个专用的ApplicationMaster(注意,ApplicationMaster需要和ApplicationManager区分)。ApplicationMaster运行在应用程序启动时的第一个容器内。ApplicationMaster会与ResourceManager协商获取容器来执行应用中的mappers和reducers,之后会将ResourceManager分配的容器资源呈现给运行在每个DataNode上的NodeManager。ApplicationMaster请求的资源是具体的。包括:

  • 处理作业需要的文件块
  • 为应用程序创建的以容器为单位的资源
  • 容器大小(例如,1GB内存和一个虚拟核心)
  • 资源在何处分配,这个依据从NameNode获取的块存储位置信息(如机器1的节点10上分配4个容器,机器2的节点20上分配8个容器)
  • 资源请求的优先级
ApplicationMaster是一个特定的框架。例如,MapReduce程序是MRAppMaster,spark是SparkAppMaster。

Container

Container是对于资源的抽象, 它封装了某个节点上的多维度资源,如内存、CPU等。

Yarn工作流程

Hadoop-yarn架构解析Hadoop-yarn架构解析
  1. 客户端向ResourceManager提交应用程序。
  2. ResourceManager的ApplicationManager组件指示NodeManager(运行在每一个工作节点的其中一个)为应用程序启动一个新的ApplicationMaster容器。
  3. ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过NodeManager查看应用程序的运行状态。
  4. ApplicationMaster计算应用完成所需要的资源,然后向ResourceManager申请需要的资源(容器)。ApplicationMaster在应用程序的整个生命周期内与ResourceManager保持联系,确保其所需要资源的列表被ResourceManager严格遵守,并且发送一些必要的Kill请求杀死任务。
  5. 申请到资源后,ApplicationMaster指示NodeManager在对应的节点上创建容器。
  6. NodeManager创建容器,设置好运行环境,然后启动容器。
  7. 各个容器定时向ApplicationMaster发送任务的运行状态和进度,这样ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。
  8. 应用程序完成后,ApplicationMaster会通知ResourceManager该作业已经完成并注销关闭自己。
这里要注意几点。第一,NodeManager会将节点状态和健康状况发送到ResourceManager,ResourceManager拥有全局资源视图才能分配资源。第二,ResourceManager的Scheduler组件决定容器在哪个节点上运行。

参考

  1. ^https://hadoop.apache.org/docs/r2.7.3/hadoop-yarn/hadoop-yarn-site/YARN.html
编辑于 04-15
Hadoop
YARN
大数据处理
赞同 1​ 添加评论
分享
喜欢 ​ 收藏
赞同 1
分享