Yarn Shared Cache (Yarn 共享缓存服务)是社区 Hadoop 2.9 版本之后上新增的功能,参见YARN-1492,它的目的是提供了一种安全且可扩展的方式向 HDFS 上传和管理应用程序依赖资源,降低 Yarn application 因为依赖资源的上传以及本地化带来的时间消耗。
通过使用 Yarn Shared Cache, 对于相同的依赖资源,YARN application 可以直接使用其他 application 上传的资源或者该 application 的先前运行时自己上传的资源,而无需每次都重新上传以及本地化相同的资源文件,从而节省网络资源并大大减少YARN应用程序启动时间。
本文主要简单介绍 Yarn Shared Cache 的架构和使用方式,具体官方文档可参见 SharedCache
架构
Yarn Shared Cache 主要由4个部分组成:
- Shared Cache Client: 共享缓存客户端
主要提供与 SCM 交互的接口,用户或者开发者可以使用 shared cache client 计算资源校验值(checksum),使用校验值向 SCM 获取共享缓存中该资源的存储路径。
Shared Cache HDFS Directory:共享缓存 HDFS 存储目录
共享存储资源全部都存储在指定的 HDFS 目录中,共享缓存目录通过HDFS权限进行保护,并且全局只读,只允许信任用户去写。这个目录只有共享缓存管理过程和在 NM 的 uploader 在上传资源时会修改。资源通过MD5 校验值被分到各个子目录。1
2
3/sharedcache/a/8/9/a896857d078/foo.jar
/sharedcache/5/0/f/50f11b09f87/bar.jar
/sharedcache/a/6/7/a678cb1aa8f/job.jarShared Cache Manager (SCM):共享缓存管理器
SCM是一个单独的服务进程,它可以运行在任何节点上。这样,管理员可以在不影响其他组件的同时,启动,停止SCM。它负责处理从客户端以及 uploader 发来的请求,以及管理所有共享的资源。同时负责维护所有存储在 HDFS 目录中的缓存数据以及这些数据的元信息。它由两个主要的组件组成:后端存储服务和缓存清理服务。
后端存储服务负责维护和持久化 shared cache 的元数据。包括在缓存中的资源,资源最后一次被使用时间,当前使用资源的应用等信息。目前是使用内存存储,并且在重启后会重建。
清理服务负责确保不再使用的资源会被从缓存中移除。它周期性的扫描资源,清理过期的和没有应用使用的资源。
Shared Cache Uploader and Localization:缓存上传以及本地化
Shared Cache uploader 是一个运行在 NM 上的服务,用来上传资源到共享缓存。它负责确认资源校验值,根据校验值动态确定资源对应的HDFS目录,然后上传资源到该目录中,然后通知 SCM 该资源已经被添加到缓存。
Shared Cache uploader 是异步的,不会阻塞 yarn应用的启动。
一旦资源上传到共享缓存中,Yarn 使用 NM 本地化机制即可使得资源可获得。基于 NM 本地化资源的机制,由于 Shared Cache 中的缓存文件的 HDFS 地址和时间戳一直保持不变,当 NM 本地化过一次该资源后,后续再使用该资源时直接使用本地缓存的资源即可,也不会每次都重新本地化资源。因此,后续依赖于该资源的任务都不需要再次上传和本地化该资源,降低了任务启动时间。
部署
初始化设置
管理员需要通过以下几步来初始化设置 Shared Cache
1 | 1.创建HDFS目录,默认是 /sharecache 可配置 |
所有配置选项
Yarn Shared Cache 所需要的所有配置大致如下:
Name | Default value | Description |
---|---|---|
yarn.sharedcache.enabled | false | 是否开启 shared cache |
yarn.sharedcache.root-dir | /sharedcache | shared cache 根目录 |
yarn.sharedcache.nested-level | 3 | 非负整数,根据 checksum 子目录嵌套层数. |
yarn.sharedcache.store.class | org.apache.hadoop.yarn.server.sharedcachemanager.store.InMemorySCMStore | SCM store 具体实现 |
yarn.sharedcache.app-checker.class | org.apache.hadoop.yarn.server.sharedcachemanager.RemoteAppChecker | SCM app-checker |
yarn.sharedcache.store.in-memory.staleness-period-mins | 10080 | 资源过期时间,如果资源上次被使用时间到现在超过过期时间则被认为是过期。单位是分钟 |
yarn.sharedcache.store.in-memory.initial-delay-mins | 10 | scm store 初始化延迟时间,单位分钟. |
yarn.sharedcache.store.in-memory.check-period-mins | 720 | scm store application 检测周期,单位分钟. |
yarn.sharedcache.admin.thread-count | 1 | SCM admin 接口处理线程数 |
yarn.sharedcache.cleaner.period-mins | 1440 | 资源清理任务运行周期,单位分钟. |
yarn.sharedcache.cleaner.initial-delay-mins | 10 | cleaner 任务初始化延迟时间,单位分钟. |
yarn.sharedcache.cleaner.resource-sleep-ms | 0 | 清理各个 resource 时的间隔时间. 单位 ms. |
yarn.sharedcache.uploader.server.thread-count | 50 | SCM 处理 NM upload 请求的线程数 |
yarn.sharedcache.client-server.address | 0.0.0.0:8045 | The address of the client interface in the SCM |
yarn.sharedcache.uploader.server.address | 0.0.0.0:8046 | The address of the node manager interface in the SCM |
yarn.sharedcache.admin.address | 0.0.0.0:8047 | The address of the admin interface in the SCM |
yarn.sharedcache.webapp.address | 0.0.0.0:8788 | The address of the web application in the SCM |
yarn.sharedcache.client-server.thread-count | 50 | SCM 处理客户端请求的线程数 |
yarn.sharedcache.checksum.algo.impl | org.apache.hadoop.yarn.sharedcache.ChecksumSHA256Impl | 计算文件 checksum 值算法 |
yarn.sharedcache.nm.uploader.replication.factor | 10 | resource 上传到 hdfs 后的备份数 |
yarn.sharedcache.nm.uploader.thread-count | 20 | NM 上传资源文件线程数 |
yarn.sharedcache.keytab | required for security cluster | keytab for SCM |
yarn.sharedcache.principal | required for security cluster | principal for SCM |
MR 支持 YARN Shared Cache
社区对 MR 任务进行了 YARN Shared Cache 功能支持,通过客户端配置来开启 MR 任务资源直接使用 Yarn Shared Cache进行托管。MR 客户端会优先使用 YARN Shared Cache 托管依赖资源,如果 SCM 服务不可用时,就会回退到原来的上传依赖资源到任务的提交目录的模式。
使用主要使用的配置如下。
1 | <property> |