YARN共享缓存提供了一种以安全且可扩展的方式将共享应用程序资源上传和管理到HDFS的功能。YARN应用程序可以利用其他应用程序上载的资源或同一应用程序的先前运行,而无需多次重新上传和本地化相同的文件。这将节省网络资源并减少YARN应用程序的启动时间。
当前,YARN共享缓存已发布并可以使用。主要组件已实现并已在大规模生产环境中部署。仍然缺少一些内容(即强身份验证)。这些缺少的功能将作为后续第二阶段工作的一部分进行实施。有关更多信息,请参见YARN-7282。
共享缓存功能包括4个主要组件:
YARN应用程序开发人员和用户应使用共享缓存客户端与共享缓存进行交互。该客户端负责与共享缓存管理器进行交互,计算应用程序资源的校验和,并在共享缓存中声明应用程序资源。一旦应用程序声明了资源,就可以在应用程序的生命周期内免费使用该资源。请参阅SharedCacheClient.java javadoc以获取更多文档。
共享缓存HDFS目录存储所有共享缓存资源。它受到HDFS权限的保护,并且可以全局读取,但是写入仅限于受信任的用户。仅共享缓存管理器和节点管理器上的资源上载器可以修改此HDFS目录。使用资源的校验和将资源分布在一组子目录中:
/sharedcache/a/8/9/a896857d078/foo.jar /sharedcache/5/0/f/50f11b09f87/bar.jar /sharedcache/a/6/7/a678cb1aa8f/job.jar
共享缓存管理器负责处理来自客户端的请求并管理共享缓存的内容。它既照顾元数据,又照顾HDFS中的持久资源。它由两个主要部分组成,一个后端存储和一个清洁服务。SCM作为单独的守护进程运行,可以将其放置在群集中的任何节点上。这允许管理员启动/停止/升级SCM,而不会影响其他YARN组件(即资源管理器或节点管理器)。
后端存储负责维护和持久保存有关共享缓存的元数据。这包括高速缓存中的资源,上次使用资源的时间以及当前正在使用该资源的应用程序的列表。后备存储的实现是可插入的,并且当前使用内存存储,该存储在重新启动后重新创建其状态。
清理程序服务通过确保从缓存中删除不再使用的资源来维护HDFS中的持久资源。它会定期扫描缓存中的资源,如果资源既陈旧又没有当前使用该应用程序的活动应用程序,则将其逐出。
为了支持YARN共享缓存,应用程序必须在提交应用程序时使用共享缓存客户端。如果共享缓存客户端在共享缓存中,则它返回与资源相对应的URL。要使用缓存的资源,YARN应用程序仅使用缓存的URL创建LocalResource对象,并在提交应用程序时将setShouldBeUploadedToSharedCache设置为true。
例如,以下是使用缓存的URL创建LocalResource的方法:
字符串localPathChecksum = sharedCacheClient.getFileChecksum(localPath); URL cachedResource = sharedCacheClient.use(appId,localPathChecksum); LocalResource资源= LocalResource.newInstance(cachedResource, LocalResourceType.FILE,LocalResourceVisibility.PUBLIC 大小,时间戳,null,true);
管理员可以按照以下步骤最初设置共享缓存:
/ hadoop / bin / yarn --daemon启动sharedcachemanager
可以在yarn-default.xml中找到配置参数,并且应该在yarn-site.xml文件中进行设置。以下是配置参数及其默认值的列表:
名称 | 描述 | 默认值 |
---|---|---|
yarn.sharedcache.enabled | 是否启用共享缓存 | 假 |
yarn.sharedcache.root-dir | 共享缓存的根目录 | /共享缓存 |
yarn.sharedcache.nested级别 | 进入校验和目录之前的嵌套目录级别。它必须是非负的。 | 3 |
yarn.sharedcache.store.class | 用于SCM商店的实现 | org.apache.hadoop.yarn.server.sharedcachemanager.store.InMemorySCMStore |
yarn.sharedcache.app-checker.class | 用于SCM应用检查器的实现 | org.apache.hadoop.yarn.server.sharedcachemanager.RemoteAppChecker |
yarn.sharedcache.store.in.memory.staleness-period-mins | 如果自上次引用以来的时间超过失效期限,则内存中存储中的资源被视为失效。以分钟为单位指定此值。 | 10080 |
yarn.sharedcache.store.in.memory.initial-delay-mins | 内存存储运行其第一次检查以删除无效的初始应用程序之前的初始延迟。以分钟为单位。 | 10 |
yarn.sharedcache.store.in.memory.check-period-mins | 内存中存储检查以删除无效的初始应用程序的频率。以分钟为单位。 | 720 |
yarn.sharedcache.admin.address | SCM(共享缓存管理器)中管理界面的地址 | 0.0.0.0:8047 |
yarn.sharedcache.admin.thread-count | 用于处理SCM管理界面的线程数(默认为1) | 1个 |
yarn.sharedcache.webapp.address | SCM(共享缓存管理器)中Web应用程序的地址 | 0.0.0.0:8788 |
yarn.sharedcache.cleaner.period分钟 | 清除任务运行的频率。以分钟为单位。 | 1440 |
yarn.sharedcache.cleaner.initial-delay-mins | 在计划第一个清理程序任务之前的初始延迟。以分钟为单位。 | 10 |
yarn.sharedcache.cleaner.resource-sleep-ms | 在处理每个共享缓存资源之间休眠的时间。以毫秒为单位。 | 0 |
yarn.sharedcache.uploader.server.address | SCM(共享缓存管理器)中节点管理器接口的地址 | 0.0.0.0:8046 |
yarn.sharedcache.uploader.server.thread-count | 用于处理来自节点管理器的共享高速缓存管理器请求的线程数(默认为50个) | 50 |
yarn.sharedcache.client-server.address | SCM(共享缓存管理器)中客户端接口的地址 | 0.0.0.0:8045 |
yarn.sharedcache.client-server.thread-count | 用于处理来自客户端的共享缓存管理器请求的线程数(默认为50个) | 50 |
yarn.sharedcache.checksum.algo.impl | 用于计算文件校验和的算法(默认情况下为SHA-256) | org.apache.hadoop.yarn.sharedcache.ChecksumSHA256Impl |
yarn.sharedcache.nm.uploader.replication.factor | 共享缓存的节点管理器上载器的复制因子(默认为10) | 10 |
yarn.sharedcache.nm.uploader.thread-count | 用于从节点管理器实例上载文件的线程数(默认为20) | 20 |