YARN结构

参考资料

Hadoop 新 MapReduce 框架 Yarn 详解

Hadoop-Yarn-框架原理及运作机制(原理篇)

初步掌握Yarn的架构及原理

基本架构

由于原来的MapReduce架构中的JobTracker结点承担了太多的任务, 新框架中将其功能进行了拆分. 拆分成了两个独立的服务:

  • ResourceManager: 全局的资源管理器, 专门负责资源管理和调度.

  • ApplicationMaster: 负责每个应用的资源管理, 任务调度, 容错等工作, 每个应用程序对应一个ApplicationMaster

整体的架构如下图:

详细来说ResourceManager, ApplicationMaster, NodeManager三者的作用.

ResourceManager

ResourceManager控制整个集群计算资源的分配. 将各部分资源(CPU, 内存, 带宽等)安排给NodeManager, 并与NodeManager一起启动和监视ApplicationMaster应用程序. 具体来说有以下作用:

  • 处理客户端(Client)请求

  • 启动和监控每个job所属的ApplicationMaster

  • 监控NodeManager

  • 集群资源的分配与调度

ApplicationMaster

单个作业的资源管理和任务监控. 管理协调ResourceManager分配给这个应用的资源, 并通过NodeManager监视资源容器的执行和资源的使用. 总的来说, ApplicationMaster有以下的作用:

  • 负责数据的切分

  • 为应用程序, 向ResourceManager申请资源(容器), 并分配给应用的子任务

  • 启动任务, 对任务进行监控和容错

NodeManager

单个节点的资源管理和监控. 每个结点将其资源(CPU, 内存, 带宽等)划分成Container, 是YARN架构中的资源单位. 因此NodeManager管理着这个结点上的所有Container. NodeManager作用有:

  • 负责Container状态的维护(处理来自ResourceManager和ApplicationMaster的命令)

  • 向ResourceManager保持心跳

YARN会为每个任务分配一个Container, 且该任务只能使用该Container中描述的资源.

调度过程

当用户提交了一个应用之后, 整个过程如下:

  • Job submission(作业提交)

    • ClientResourceManager提交一个应用/作业, 从ResourceManager获取一个Application ID(应用ID/作业ID).

    • Client计算得到输入分片, 将作业资源(job jar, 配置文件, 分片信息)拷贝到HDFS

    • Client再向ResourceManager提交作业

  • Job initialization(作业初始化)

    • ResourceManager将作业递交给Scheduler(调度器), Scheduler为作业分配第一个Container, ResourceManager同时于这个Container所在结点的NodeManager通信, NodeManager在这个Container中加载这个Job(作业/应用)的ApplicationMaster. ApplicationMaster再向ResourceManager注册. 因此就可以通过ResourceManager查看这个Job的运行状态.

    • 这个被创建的ApplicationMaster被交给所处结点的NodeManager管理监控.

    • ApplicationMaster获取这个Job的分片, 为每一个分片对应创建一个Map Task, 或Reduce Task

  • Task assignment(任务分配)

    • ApplicationMaster向ResourceManager申请资源(Container), 根据输入分片所在的结点, 根据data locality, 分配给输入数据分片附近的结点的Container.

  • Task execution(任务运行)

    • ApplicationMaster根据ResourceManager分配Container的情况, 与对应的NodeManager的通信, 启动这些Container, 读取每个任务(Task)所需的数据(job jar, 配置文件等), 然后执行该任务.

  • Progress and status update(进度和状态更新)

    • Task定时将任务的进度和状态报告给ApplicationMaster, Client定时向ApplicationMaster获取整个任务的进度和状态.

  • Job completion(作业完成)

    • Client定时检查整个作业是否完成, 作业完成后, 清空临时文件, 目录等

    • ApplicationMaster向ResourceManager注销, 并关闭自己

最后更新于

这有帮助吗?