YARN——NM的资源管理

【一些概念】


  • 本地化(Localization)

    将资源下载到本地的过程,这样container运行时可以从本地加载而不是从访问远端的文件。

  • 资源(Resource)

    资源表示运行container所需要的一个文件或library,客户端在提交任务时需要指定所依赖的资源。

    对于每个资源,可以指定如下属性:

    Url:资源下载的地址,即NM应该从何处下载该资源。

    Size:资源的大小

    Timestamp:资源的时间戳(最后修改时间)

    Type:资源的类型,可以是FILE(普通文件);ARCHIVE(归档文件,例如.jar,.tar.gz等);PATTERN(以上两种文件的混合,不过通常也是一个归档文件,通过配合pattern字段实现解压文件中的部分文件)

    Visibility:可见性,包括PUBLIC(节点上所有用户共享该资源);PRIVATE(同一用户中所有的container共享该资源);APPLICATION(同一个Application中的所有container共享该资源)。

【架构设计】


在NM中有一个专门用于本地化的服务ResourceLocalizationService。该服务的内部整体设计如下图所示:

  • 资源管理

    用于记录本地资源的信息及状态。

    按照资源的可见性划分,publicRsrc存储所有PUBLIC的资源;privateRsrc和appRsrc都是一个map,分别按用户名、appID存储PRIVATE、APPLICATION的资源。

    图中的LocalResourcesTracker是一个资源集,内部包含一个map表,以资源对象为Key,记录不同的资源。map的value是NM内部对资源描述封装的一个对象,记录资源的具体信息及当前状态,例如初始化,下载中,已完成本地化。

  • 资源本地化请求管理

    负责具体资源的下载处理,其中publicLocalizer负责PUBLIC可见性的资源下载,privLocalizers负责APPLICAITON、PRIVATE可见性的资源下载。

    privLocalizers内部以多线程的方式,对不同container的资源并行进行下载(每个线程负责一个container的资源下载)。

  • 磁盘管理

    监听local,log两个目录。当出现磁盘写满,或者不可写时进行回调处理。

  • 文件删除服务

    所有过期的资源文件,均由文件删除服务进行具体的删除处理。

  • 缓存清理服务

    对于PUBLIC、PRIVATE可见性的资源,其资源文件会有一定的缓存策略,该服务负责定期发送消息以检测是否对缓存进行清理。

  • token管理

    管理到HDFS下载所需要的token。

  • 资源状态存储

    资源的状态及存储的路径等相关信息会持久化到本地文件,方便NM重启后的恢复处理。

【资源本地化流程】


资源本地化的流程如下图所示:

流程比较清晰,就不做太多的描述了,不过补充说明几点:

  1. 由于资源是有状态的,因此如果有多个运行的container依赖了同一个资源,并且该资源具有同样的可见性,那么处理的过程中,会先在内存中会找到该资源的信息及对应状态,避免不必要的重复下载。

  2. public的资源在线程中顺序进行下载,而application和private的资源,每个container都会有一个对应的线程(LocalizerRunner),专门负责该container依赖资源的下载。

  3. 由于container的启动有DefaultContainerExecutor、LinuxContainerExecutor、DockerContainerExecutor三种方式,不同启动方式,对下载文件的权限有不同的要求,因此为统一处理逻辑,application和private的资源是在独立线(进)程中,通过RPC的方式(发送心跳请求),获取需要下载的资源列表,进行资源下载,并反馈下载的情况。

【资源管理】


  • 资源文件存放位置

    不同可见性的资源文件,其存放的位置是不同的。

    对于public的资源,存放在filecache目录下。

    对于private的资源,存放在usercache/${user}/filecache目录下,其中${user}为应用程序的提交用户。

    对于application的资源,存放在usercache/${user}/appcache/${appid}/filecache目录下。

    资源文件存储路径

    MR任务运行过程中的资源存储情况

  • 资源的生命周期

    对于applicaiton的资源,container运行结束后,资源就会进行删除,而public,private的资源,则不会进行删除。

    ResourceLocalizationService中的cacheCleanup会定时发送消息,以检测当前所有缓存资源的大小是否超过设置的值(默认为10GB)。如果超过,则根据资源的时间戳,按照LRU的方式删除时间最久未使用的资源。

【总结】


本文总结了NM中资源管理的相关内容,如有不对,欢迎指正交流。

如果觉得写得还不错,欢迎分享,点赞,在看~

欢迎关注,会有更多原创文章

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值