前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >YARN——NM的资源管理

YARN——NM的资源管理

作者头像
陈猿解码
发布2023-02-28 14:32:36
6740
发布2023-02-28 14:32:36
举报
文章被收录于专栏:陈猿解码

【一些概念】


  • 本地化(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中资源管理的相关内容,如有不对,欢迎指正交流。

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 陈猿解码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档