Yarn系列一——yarn中角色说明

在这里插入图片描述

Yarn结构图

1. Yarn有两个核心长时间运行的守护程序:ResourceManager、NodeManager:

1.1 ResourceManager

主要负责全局的资源管理,整个集群只有一个,主要有ApplicationManager和scheduler两个主要的组件:

1.1.1 ApplicationManager
  • 主要负责管理已经提交的程序,在程序提交之后,ApplicationManager首先会检查集群现有的资源是否能够满足程序申请的资源;
  • 然后确保没有其他的程序使用相同的ApplicationId;
  • 最后,就会将提交的程序交给scheduler;
  • ApplicationManager会分配第一个Containre来运行ApplicationMaster;
  • 负责监控ApplicationMaster,在遇到失败时重启ApplicationMaster运行的Container;
  • 除此之外,ApplicationManager还会在程序完成之后,在ResourceManager内存清除之前记录和管理这些已经完成的程序。
1.1.2 Scheduler
  • ResourceManager专门进行资源管理的一个组件,负责分配NodeManager上的Container资源,可超拔的,不能重启因应用失败或者硬件错误而运行失败的任务;
  • 主要有三种调度模式:Capacity Scheduler、Fair Scheduler和FIFO Scheduler。
    在这里插入图片描述

1.2 NodeManager

1.2.1 主要功能
  • 运行在每个节点上,主要负责节点上container中的进程运行监控;
  • 负责接收ResourceManager的资源分配请求,分配具体的container给应用(application);
  • 负责与ResourceManager通信,上报自己的运行状态(自己的资源等信息)和任务状态,resourceManager通过收集每个NodeManager的信息来追踪整个集群是否是健康的,管理每个节点上的日志;
  • 当一个节点启动之后,会向ResourceManager主动报告自己所有的资源;
  • NodeManager只负责管理自身的Container,并不了解运行在上面的应用的信息,也就是说NodeManager监控的是节点的资源状态,并直接与ResourceManager沟通,负责管理应用的是ApplicationMaster;
  • 其他的附属功能,例如MR中的shuffle。

在这里插入图片描述

1.2.2 主要组件
1.2.2.1 NodeStatusUpdater**:

​ 在NodeManager启动时,该组件就会自动的向ResourceManager注册,并发送节点上可用的资源,NodeManager会通过心跳机制向ResourceManager通信,汇报各个Container的状态更新,包括节点上正在运行的container和已经完成的container。ResourceManager可以通过NodeStatusUpdater发送信号,用于杀死正在运行的container。

1.2.2.2 ContainerManager

​ NodeManager中核心组件,主要由RPC server、ResourceLocalizationService 、ContainersLauncher、AuxServices、ContainersMonitor组成,ContainerManager实际上是个接口,真正的实现是ContainerManagerImpl类。

  • RPC Server:

    ​ ContainerManager从各个ApplicationMaster上接收RPC请求以启动container或者停止正在运行的Container,与ContainerTokenSecretManager合作,对所有请求进行合法性验证,所有作用在正在运行Container的操作都会写入到audit-log。RPC Server实际是RPC协议ContainerManager的server,AM可通过该协议通知某个节点启动或者释放container,ContainerManager定义了三个接口供AM使用:

    StartContainerResponse startContainer(StartContainerRequest request); //启动container
    StopContainerResponse stopContainer(StopContainerRequest request); //释放container
    GetContainerStatusResponse getContainerStatus(GetContainerStatusRequest request);//获取container列表。
    
    • ResourceLocalizationService:

      负责(从HDFS上)安全地下载和组织Container需要的各种文件资源,尽量将文件均匀的分摊到各个磁盘上,同时为下载的文件添加权限访问。

    • ContainersLauncher

      维护一个线程池,随时准备启动container,当收到来自ResourceManager或者ApplicationMaster的清理container的请求的时,清理对应的container。

    • AuxServices

      NodeManager提供了一个框架以配置附属服务扩展自己的服务,允许每个节点定制一些特定框架可能需要的服务,与NodeManager其他服务之间是隔离的。注意附属服务需要NodeManager启动之前就配置好,并由对应的应用程序的运行在本节点上的第一个Container触发启动。

    • ContainerMonitor

      当一个container启动之后,该组件就会开始监控它在运行过程中的资源利用率,ResourceManager为了实现资源的隔离和公平分配,会为每一个container分配一定的资源。ContainerMonitor会在container使用的资源超过其允许的使用份额时,就会向container发送信号将其杀掉,从而避免其影响同一节点上其他的container的运行。ContainerMonitor也是一个接口,具体实现为ContainerMonitorImpl类。NodeManager启动一个container之后,ContainerMonitor会将container进程对一个pid添加到监控列表中,以监控以pid为根的真个进程树的使用资源情况,他周期性的从/etc/proc中获取进程树的使用的总资源,如果超过预期值,则会将其杀死。最新版中,使用Linux container对资源进行隔离。

    • LogHandler

      可插拔组件,使用其可以选择将container日志写到本地磁盘还是将其打包之后上传到一个系统中。

1.2.2.3 ContainerExecutor

​ 与操作系统进行交互,存放container需要的文件和目录,进而以一种安全的方式启动和清楚container对应的进程。新版中,使用linux container对资源进行隔离。

1.2.2.4 NodeHealthCheckerService

​ 通过周期性地运行一个配置好的脚本检查节点的健康状况,同时也会周期性的在磁盘上创建临时文件一监控磁盘的健康状况。注:任何系统健康方面的改变都会通知NodeStatusUpdater,其会将信息传递给ResourceManager。

1.2.2.5 Security
  • ApplicationACLsManager NM需要为所有面向用户的API提供安全检查,如在Web-UI上只能将container日志显示给授权用户。该组件为每个应用程序维护了一个ACL列表,一旦收到类似请求后会利用该列表对其进行验证。
  • ContainerTokenSecretManager 检查收到的各种访问请求的合法性,确保这些请求操作已被RM授权。
1.2.2.6 WebServer

在给定时间点,展示该节点上所有应用程序和container列表,节点健康相关的信息和container产生的日志。

1.2.3 补充
  • 启动Container:

    为了能够启动Container,NodeManager期望收到的container定义了关于它运行时所需的详细信息,包括:container命令、环境变量、所需的资源列表和安全令牌等等。一旦收到了container启动请求,如果yarn启用了安全模式,则NodeManager会首先验证请求的合法性以及对用户和正确的资源进行授权,然后开始启动container:

    • 在本地拷贝一份运行container所需的所有资源(Distributed Cach额)
    • 为container创建隔离的工作目录,并在这些目录中准备好所有的资源
    • 运行命令启动container
  • 日志收集

    将所有的日志上传到每一个文件系统,例如HDFS,在某个NodeManager上,所有属于同一个应用程序的container日志经聚集后被写到一个FS上日志文件中,可以通过Yarn命令、WEB_UI或者直接通过FS访问这些日志。

  • 附属服务

    例如MR中的shuffle就是通过附属服务实现的,该股无回启东一个Netty server,其就会处理来自Reduce Task的MR相关的shuffle请求,MR和ApplicationMaster为shuffle服务定义了服务ID,和可能需要的安全令牌,二NodeManager向ApplicationMaster提供shuffle服务的运行端口号,并由ApplicationMaster传递给各个ReduceTask。

1.3 Container

  • Yarn对于计算机资源的抽象,包括一组CPU、内存,具体的任务运行在Container中,具体执行任务(task)基本单元,与节点的关系:

  • 一个节点可以有多个container,但是不存在跨节点的container;

  • 在Yarn框架中,ResourceManager只负责告知ApplicationMaster哪些container是可以使用的,ApplicationMaster需要找NodeManager请求分配具体的container;

1.4 ApplicationMaster

  • 每一个具体的应用(application)都有一个ApplicationMaster实例;
  • 与ResourceManager通信请求资源,来获得具体的运行的任务;
  • 负责container的请求、发布、监控任务运行状态,遇到失败的任务还负责重启它,注意ApplicationMaster负责的是监控应用程序的状态,Nodemanager负责监控的是整个节点的资源使用情况。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值