【深入浅出 Yarn 架构与实现】6-3 NodeManager 分布式缓存

news2024/9/28 19:31:48

不要跳过这部分知识,对了解 NodeManager 本地目录结构,和熟悉 Container 启动流程有帮助。

一、分布式缓存介绍

主要作用就是将用户应用程序执行时,所需的外部文件资源下载缓存到各个节点。
YARN 分布式缓存工作流程如下:

  1. 客户端将应用程序所需的文件资源 (外部字典、JAR 包、二进制文件) 提交到 HDFS 上。
  2. 客户端将应用程序提交到 RM 上。
  3. RM 将与某个 NM 进行通信,启动应用程序 AM,NM 收到命令后,首先从 HDFS 上下载文件 (缓存),然后启动 AM。
  4. AM 与 RM 通信,以请求和获取计算资源。
  5. AM 收到新分配到的计算资源后,与对应的 NM 通信,以启动任务。
  6. 如果应用程序第一次在该节点上启动任务,NM 首先从 HDFS 上下载文件缓存到本地,然后启动任务。
  7. NM 后续收到启动任务请求后,如果文件已在本地缓存,则直接执行任务,否则等待文件缓存完成后再启动。
  8. 各个节点上的缓存文件由对应的 NM 管理和维护。在 Hadoop 中,分布式缓存并不是将文件缓存到集群中各个节点的内存中,而是将文件缓存到各个节点的磁盘上,以便执行任务时直接从磁盘上读取文件。

image.png

二、特性介绍

一)资源可见性和分类

分布式缓存机制是由各个 NM 实现的,主要功能是将应用程序所需的文件资源缓存到本地,以便后续任务的使用。
资源缓存是使用时触发的,也就是第一个用到该资源的任务触发。后续任务无需再进行缓存,直接使用即可。
根据可见性,NM将资源分为三类:

  • Public:节点上所有的用户都可以共享该资源,只要有一个用户的应用程序将着这些资源缓存到本地,其他所有用户的所有应用程序都可以使用;
  • Private:节点上同一用户的所有应用程序共享该资源,只要该用户其中一个应用程序将资源缓存到本地,该用户的所有应用程序都可以使用;
  • Application:节点上同一应用程序的所有Container共享该资源。

YARN是通过比较 resource、type、timestamp 和 pattern四个字段是否相同来判断两个资源请求是否相同的。如果一个已经被缓存到各个节点上的文件被用户修改了,则下次使用时会自动触发一次缓存更新,以重新从HDFS上下载文件。
分布式缓存完成的主要功能是文件下载,涉及大量的磁盘读写,因此整个过程采用了异步并发模型加快文件下载速度,以避免同步模型带来的性能开销。

二)分布式缓存实现

NodeManager 采用轮询的分配策略将这三类资源存放在 yarn.nodemanager.local-dirs 指定的目录列表中,在每个目录中,资源按照以下方式存放:

  • PUBLIC 资源:存放在 ${yarn.nodemanager.local-dirs}/filecache/ 目录下,每个资源将单独存放在以一个随机整数命名的目录中,且目录的访问权限均为 0755。
  • PRIVATE 资源:存放在 ${yarn.nodemanager.local-dirs}/usercache/${user}/filecache/ 目录下,每个资源将单独存放在以一个随机整数命名的目录中,且目录的访问权限均为 0710。
  • APPLICATION 资源:存放在 ${yarn.nodemanager.local-dirs}/usercache/${user}/${appcache}/${appid}/filecache/ 目录下,每个资源将单独存放在以一个随机整数命名的目录中,且目录的访问权限均为 0710。

其中 Container 的工作目录位于 ${yarn.nodemanager.local-dirs}/usercache/${user}/${appcache}/${appid}/${containerid} 目录下,其主要保存 jar 包文件、字典文件对应的软链接。
目录结构如下所示:

./nm-local-dir/
|-- filecache		// PUBLIC资源
|   `-- 10			// 每个资源将单独存放在以一个随机整数命名的目录中
|-- nmPrivate
|   |-- application_xxxx_xxx
|   |   |-- container_xxx_xxx_xxx_xx_xxxx
|   |   |-- container_xxx_xxx_xxx_xx_xxxx	// 私有目录数据(执行脚本、token文件、pid文件)
|   |   |   |-- container_xxx_xxx_xxx_xx_xxxx.pid
|   |   |   |-- container_xxx_xxx_xxx_xx_xxxx.tokens
|   |   |   `-- launch_container.sh
|   |-- application_xxxx_xxx
|   `-- application_xxxx_xxx
`-- usercache
    |-- userXxx
    |   |-- appcache		// APPLICATION资源
    |   `-- filecache		// PRIVATE资源
    |-- userXxx
    |   |-- appcache
    |   `-- filecache

image.png

三、清理策略

1、Container 运行结束清理
2、清理过期缓存
NodeManager 为了避免缓存的文件过多导致磁盘「撑爆」,其会定期清理过期的缓存文件,具体方法如下:

  • 每隔一定时间 yarn.nodemanager.localizer.cache.cleanup.interval-ms(单位是毫秒,默认值是 10×60×1000,即 10 分钟)启动一次清理工作,确保每个缓存目录中文件容量小于 yarn.nodemanager.localizer.cache.target-size-mb(单位是 MB,默认是 10240,即 10GB)
  • 如果超过该值,则采用 LRU(Least Recently Used)算法清除已不再使用的缓存文件,直至文件容量低于设定值。

四、小结

本篇介绍了 NodeManager 分布式缓存,当你需要看 NM 本地目录,需要了解各目录中存储内容时,本篇提供了对应的帮助。同时也对 Container 启动流程做了简要的讲解,对后面了解 Container 生命周期提供了一定的前置知识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/503603.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电脑——如何配置一台电脑

一、需要买那些东西 主板:显卡、电源、CPU、内存条、硬盘、显示器、鼠标、键盘、音响 怎么开始? 知乎黑虾 首先确定CPU型号再选择与该CPU兼容的主板(不同的CPU对应的主板插槽类型是不同的) 如何选择CPU型号: 主要…

HttpClient入门介绍

介绍 介绍 HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。 作用: 发送HTTP请求 接收响应数据 应用场景: …

Unreal Engine11:触发器和计时器的使用

写在前面 主要是介绍一下触发器和计时器的使用; 一、在Actor中使用触发器 1. 新建一个C类 创建的C类也是放在Source文件夹中的Public和Private文件夹中;选择Actor作为继承的父类;头文件包括一个触发器和两个静态网格,它们共同…

基于SpringBoot,vue的家政服务平台的设计与实现

背景 以往的家政服务管理平台的管理,一般都是纸质文件来管理家政服务信息,传统的管理方式已经无法满足现代人们的需求;使用家政服务管理平台, 首先可以大幅提高家政服务信息检索,只需输入家政服务相关信息就能在数秒内反馈想要的…

真题详解(哈希冲突)-软件设计(七十)

真题详解(3FN)-软件设计(六十九)https://blog.csdn.net/ke1ying/article/details/130548812 在以阶段划分的编译器,____阶段的主要作用是分析构成程序的字符及由字符构造规则构成的符号是否复合程序语言的规定。 词法分析 B.语法分析 C.语义分析 D.代码…

Linux 文件系统原理 / 虚拟文件系统VFS

Linux 文件系统原理 / 虚拟文件系统VFS 虚拟文件系统 VFSVFS 定义VFS 的对象演绎超级块 super_block索引节点 inode目录项 dentry文件 file 打开文件流程参考文献 虚拟文件系统 VFS VFS 定义 VFS是一个抽象层,其向上提供了统一的文件访问接口,而向下则…

深度学习笔记之卷积神经网络(二)图像卷积操作与卷积神经网络

深度学习笔记之卷积神经网络——图像卷积操作与卷积神经网络 引言回顾:图像卷积操作补充:卷积核不是卷积函数 卷积神经网络卷积如何实现特征描述/提取卷积神经网络中的卷积核的反向传播过程场景构建与前馈计算卷积层关于卷积核的反向传播过程卷积层关于输…

《花雕学AI》新版必应 Bing 登场:轻松注册,一站式搜索、聊天与绘画应有尽有

引言: 你是否曾经在网上搜索信息时感到困惑或沮丧?你是否曾经想要在网上创造一些有趣或有用的内容,却不知道从何开始?你是否曾经想要用文字描述一个图像,却无法找到合适的图片?如果你的答案是肯定的&#x…

ChatGPT将抢占谁的工作,未来如何应对

“AI人工智能领域里程碑式应用” ChatGPT影响力已经越来越大,激起大家强烈好奇心的同时,也让一些人发出了“感觉自己快要失业了”的焦虑,今天先说一下哪些人的工作会受到 ChatGPT等AI人工智能影响 从工业时代到数字时代这100多年的发展历程来…

【华为机试】——HJ4 字符串分隔

【华为机试】——HJ5 进制转换😎 前言🙌HJ4 字符串分隔方法一:巧用scanf的输入格式方法二:循环分解思想 总结撒花💞 😎博客昵称:博客小梦 😊最喜欢的座右铭:全神贯注的上…

泛型的特点和深浅拷贝的区别以及不相等对象的hashcode值的问题

永远都不为自己选择的道路而后悔,人生如同坐火车,风景再美也会后退,流逝的时间和邂逅的人终会渐行渐远,前行的始终是自己 泛型常用特点 泛型是JavaSE1.5之后的特性,《Java核心技术》中对泛型的定义是: “…

数据血缘分析工具SQLFLow自动画出数据库的 ER 模型

马哈鱼数据血缘分析器通过分析你所提供的 SQL 脚本,或者连接到数据库,可以自动画出数据库的 ER 模型,可视化表和字段的关系,帮助你迅速了解数据库的设计模型,进行高效的团队沟通。 马哈鱼通过两种途径来为你自动可视化…

MySQL中使用delete_at(时间戳)作为逻辑删除标记时如何使用MyBatis-Plus逻辑删除组件插入时间戳,以及如何解决自动填充失效的问题

背景 MySQL中使用delete_at(时间戳)作为逻辑删除标记 在业务中,使用逻辑删除是普遍做法,通常会使用一个名为deleted(0/1)的字段表示删除状态。 但是如果遇到有唯一约束,且可能反复删除和重新…

chatgpt如何引入本地知识?我们来看下emnlp 2022如何将本地图谱知识引入到任务型对话系统中

一、概述 title:Injecting Domain Knowledge in Language Models for Task-Oriented Dialogue Systems 论文地址:https://arxiv.org/abs/2212.08120 代码:GitHub - amazon-science/domain-knowledge-injection 1.1 Motivation 如何在PLM…

SIFT描述子实现

参考&#xff1a;SIFT图像匹配原理及python实现&#xff08;源码实现及基于opencv实现&#xff09; #include <iostream> #include <opencv2/opencv.hpp> #define _USE_MATH_DEFINES #include <math.h> #include <numeric>float mod_float(float x, f…

YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析

前言 最近我在研究YOLOv5的改进&#xff0c;一个模型的好坏、改进后效果如何都是需要一系列指标来判断的。这篇就是我将这几天学到的内容做一下总结。 友情提醒&#xff1a;本篇干货较多&#xff0c;建议先再慢慢看噢&#xff01; ​ &#x1f340;本人YOLOv5源码详解系列&…

大规模并行处理架构Doris入门操作

目录 1 基本概念1.1 Row & Column1.2 Tablet & Partition 2 创建用户2.1 创建数据库并赋予权限2.2 Doris 建表、数据导入与删除 3 建表&#xff08;Create Table&#xff09;3.1 字段类型3.2 数据划分3.3 关于 Partition 和 Bucket 的数量和数据量的建议3.4 演示单分区…

UML状态图详解

上篇文章&#xff0c;介绍了UML的基础知识&#xff0c;并详细介绍了UML中类图的知识点与画法。 本篇&#xff0c;来继续介绍UML中的另一种图——状态图。 1 UML状态图简介 状态图&#xff0c;显示一个状态机&#xff0c;属于UML活动图。 UML具有许多不同类型的图表&#xff…

<代码分享> 分支定界算法的 Python 代码框架

本文以求解整数规划模型为例&#xff0c;提供分支定界算法的 Python 代码框架&#xff0c;期待完善、指正和交流。 文件结构 具体代码 problem.py 定义问题的格式&#xff1a; from typing import Listclass Problem(object):"""problem"""de…

OneAPI 编译cp2k 9.1和cp2k 2023.1

环境信息&#xff1a; Rocky Linux 8.6 Linux server 4.18.0-425.19.2.el8_7.x86_64 gcc version 8.5.0 20210514 (Red Hat 8.5.0-16) (GCC) OneAPI 2023 Intel(R) oneAPI DPC/C Compiler 2023.0.0 (2023.0.0.20221201) ifort version 2021.8.0 一、编译cp2k 9.1 这里用的…