YARN-Shared-Cache
共享缓存包括4个主要功能:
1.共享缓存客户端
2.HDFS目录扮演缓存
3.共享缓存管理器(SCM)
4.本地化服务和上传器
用户或者开发者需要跟共享缓存客户端交互,客户端负责与共享缓存管理器交互,计算应用资源校验和,并且在共享缓存获取应用资源。
共享缓存目录
共享缓存目录通过HDFS权限进行保护,并且全局只读,只允许信任用户去写。这个目录只有共享缓存管理和在NM的uploader修改。资源通过校验和被分到各个子目录。
/sharedcache/a/8/9/a896857d078/foo.jar /sharedcache/5/0/f/50f11b09f87/bar.jar /sharedcache/a/6/7/a678cb1aa8f/job.jar
共享缓存管理器
共享缓存管理器负责处理从客户端发来的请求,并且管理共享的内容。它负责在HDFS中的元数据和持久化数据。它由两个主要的组件组成。一个后端存储和一个清理服务。SCM是一个单独的守护进程,它可以运行在任何节点上。这样,管理员可以在不影响其他组件的同时,启动,停止SCM。
后端存储负责维护和持久化共享存储的元数据。包括在缓存中的资源,资源最后一次被使用,当前使用资源的应用。目前是使用内存存储,并且在重启后会重建。
清理服务负责确保不再使用的资源会被从缓存中移除。它周期性的扫描资源,清理陈旧的和没有应用使用的资源。
共享缓存上传器和本地化服务
上传器是一个服务,运行在NM,并且上传资源到共享缓存。负责确认资源校验和,上传资源到HDFS,通知共享缓存管理器一个资源已经被添加到缓存。需要注意的是,uploader是异步的,不会阻塞yarn应用的启动。并且,添加资源到缓存用一种友好的方式,不会影响运行的应用。一旦uploader上传一个资源到共享缓存,YARN使用NM本地化机制使得资源可获得。
部署YARN应用使用共享缓存
如果需要使用共享缓存,需要在提交的时候使用缓存客户端,缓存客户端会返回一个已经缓存的资源的URL,如果要使用缓存资源,YARN应用需要明确使用URL去创建本地化资源对象并且设置setShoudBeUploadedToSharedCache为true。
String localPathChecksum = sharedCacheClient.getFileChecksum(localPath);
URL cachedResource = sharedCacheClient.use(appId, localPathChecksum);
LocalResource resource = LocalResource.newInstance(cachedResource,
LocalResourceType.FILE, LocalResourceVisibility.PUBLIC
size, timestamp, null, true);
管理共享缓存
设置共享缓存
管理员可以通过下列步骤初始化设置共享缓存:
1.创建HDFS目录,默认是/sharecache
2.设置共享缓存目录0755
3.允许运行共享缓存管理器和NM的用户访问此目录
4.在yarn-site.xml里面设置属性yarn.sharedcache.enabled=true,yarn.sharedcache.root-dir=/sharecache。
5.启动共享缓存管理器
$ yarn --daemon start sharedcachemanager
配置参数
yarn.sharecache.enabled:false
yarn.sharecache.root-dir
yarn.sharecache.nested-level:目录嵌套级别,默认为3
yarn.sharecache.store.class:org.apache.hadoop.yarn.server.sharedcachemanager.store.InMemorySCMStore
yarn.sharecache.app-checker.class:org.apache.hadoop.yarn.server.sharedcachemanager.RemoteAppChecker
yarn.sharecache.store-in-memory.staleness-period-mins:10080
yarn.sharecache.store-in-memory.inital-dalay-mins
yarn.sharecache.store-in-memory.check-period-mins
yarn.sharecache.admin.address:8047
yarn.sharecache.admin.thread-count
yarn.sharecache.webapp.address:8788
yarn.sharecache.cleaner.perod-mins:清理任务运行频率
yarn.sharecache.cleaner.initial-delay-mins
yarn.sharecache.cleaner.resouce-sleep-ms
yarn.sharecache.uploader.server.address:8046
yarn.sharecache.uploader.server.thread-count:50
yarn.sahrecache.client-server.address:8045
yarn.sharecache.client-server.thread-count:50
yarn.sharecache.checksum.algo.impl:org.apache.hadoop.yarn.sharedcache.ChecksumSHA256Impl
yarn.sharecache.nm.uploader.replication.factor:10
yarn.sharecache.nm.uploader.thread-count:20