YARN Shared Cache
YARN Shared Cache
YARN Shared Cache는 공유 애플리케이션 리소스를 안전하고 확장 가능한 방식으로 HDFS에 업로드하고 관리하는 기능을 제공합니다. YARN 애플리케이션은 다른 애플리케이션이나 같은 애플리케이션의 이전 실행이 업로드한 리소스를 활용할 수 있어, 동일한 파일을 여러 번 다시 업로드하고 지역화(localize)할 필요가 없습니다. 이는 네트워크 리소스를 절약하고 YARN 애플리케이션 시작 시간을 줄여줍니다.
출처: 문서
본문
개요 (Overview)
YARN Shared Cache는 공유 애플리케이션 리소스를 HDFS에 안전하고 확장 가능한 방식으로 업로드하고 관리하는 기능을 제공합니다. YARN 애플리케이션은 다른 애플리케이션이나 같은 애플리케이션의 이전 실행이 업로드한 리소스를 활용할 수 있습니다. 이는 네트워크 리소스를 절약하고 YARN 애플리케이션 시작 시간을 줄여줍니다.
현재 상태와 향후 계획
현재 YARN Shared Cache는 릴리스되어 사용할 수 있습니다. 주요 컴포넌트는 구현되어 대규모 운영 환경에 배포되었습니다. 아직 빠진 부분(예: 강한 인증)이 있습니다. 이러한 빠진 기능은 후속 phase 2 작업의 일부로 구현될 것입니다. 자세한 내용은 YARN-7282를 참조하세요.
아키텍처 (Architecture)
공유 캐시 기능은 4가지 주요 컴포넌트로 구성됩니다:
- 공유 캐시 클라이언트(shared cache client).
- 캐시 역할을 하는 HDFS 디렉터리.
- 공유 캐시 관리자(SCM, shared cache manager).
- 지역화 서비스와 업로더(localization service and uploader).
공유 캐시 클라이언트 (The Shared Cache Client)
YARN 애플리케이션 개발자와 사용자는 공유 캐시 클라이언트를 사용해 공유 캐시와 상호작용해야 합니다. 이 클라이언트는 공유 캐시 관리자와 상호작용하고, 애플리케이션 리소스의 체크섬을 계산하며, 공유 캐시에서 애플리케이션 리소스를 claim하는 역할을 담당합니다. 애플리케이션이 리소스를 claim하면, 애플리케이션의 수명주기 동안 그 리소스를 자유롭게 사용할 수 있습니다. 자세한 문서는 SharedCacheClient.java javadoc를 참조하세요.
공유 캐시 HDFS 디렉터리 (The Shared Cache HDFS Directory)
공유 캐시 HDFS 디렉터리는 모든 공유 캐시 리소스를 저장합니다. 이는 HDFS 권한으로 보호되며 전역적으로 읽을 수 있지만, 쓰기는 신뢰할 수 있는 사용자로 제한됩니다. 이 HDFS 디렉터리는 공유 캐시 관리자와 노드 관리자의 리소스 업로더만 수정할 수 있습니다. 리소스는 리소스의 체크섬을 사용해 하위 디렉터리 집합에 분산됩니다:
/sharedcache/a/8/9/a896857d078/foo.jar
/sharedcache/5/0/f/50f11b09f87/bar.jar
/sharedcache/a/6/7/a678cb1aa8f/job.jar
공유 캐시 관리자 (Shared Cache Manager, SCM)
공유 캐시 관리자는 클라이언트의 요청을 처리하고 공유 캐시의 내용을 관리하는 책임을 집니다. HDFS의 메타데이터와 영구화된 리소스 모두를 관리합니다. 이는 백엔드 스토어(back end store)와 청소 서비스(cleaner service)라는 두 주요 컴포넌트로 구성됩니다. SCM은 클러스터의 어떤 노드에든 배치할 수 있는 별도의 데몬 프로세스로 실행됩니다. 이는 관리자가 다른 YARN 컴포넌트(즉 resource manager나 node managers)에 영향을 주지 않고 SCM을 시작/중지/업그레이드할 수 있게 해줍니다.
백엔드 스토어는 공유 캐시에 대한 메타데이터를 유지하고 영구화하는 책임을 집니다. 여기에는 캐시의 리소스, 리소스가 마지막으로 사용된 시기, 현재 리소스를 사용 중인 애플리케이션 목록이 포함됩니다. 백킹 스토어의 구현은 플러그형이며, 현재는 재시작 후 상태를 재생성하는 인메모리 스토어를 사용합니다.
청소 서비스는 더 이상 사용되지 않는 리소스가 캐시에서 제거되도록 보장하여 HDFS의 영구화된 리소스를 유지합니다. 캐시의 리소스를 주기적으로 스캔하고, 리소스가 stale하고 현재 사용 중인 활성 애플리케이션이 없으면 퇴출(evict)합니다.
공유 캐시 업로더와 지역화 (The Shared Cache uploader and localization)
공유 캐시 업로더는 노드 관리자에서 실행되며 리소스를 공유 캐시에 추가하는 서비스입니다. 이는 리소스의 체크섬을 검증하고, 리소스를 HDFS에 업로드하며, 리소스가 캐시에 추가되었음을 공유 캐시 관리자에게 알리는 책임을 집니다. 업로더 서비스는 컨테이너 실행과 비동기적이며 yarn 애플리케이션의 시작을 차단하지 않는다는 점에 유의하는 것이 중요합니다. 또한 캐시에 추가하는 것은 best effort 방식으로 이루어지며 실행 중인 애플리케이션에 영향을 주지 않습니다. 업로더가 리소스를 공유 캐시에 배치하면, YARN은 일반적인 노드 관리자 지역화 메커니즘을 사용해 애플리케이션이 리소스를 사용할 수 있게 합니다.
YARN Shared Cache로 애플리케이션 개발하기
YARN 공유 캐시를 지원하려면 애플리케이션이 제출 중에 공유 캐시 클라이언트를 사용해야 합니다. 공유 캐시 클라이언트는 리소스가 공유 캐시에 있으면 해당 리소스에 대응하는 URL을 반환합니다. 캐시된 리소스를 사용하려면 YARN 애플리케이션은 단순히 캐시된 URL을 사용해 LocalResource 객체를 만들고, 애플리케이션 제출 중에 setShouldBeUploadedToSharedCache를 true로 설정합니다.
예를 들어 캐시된 URL로 LocalResource를 만드는 방법은 다음과 같습니다:
String localPathChecksum = sharedCacheClient.getFileChecksum(localPath);
URL cachedResource = sharedCacheClient.use(appId, localPathChecksum);
LocalResource resource = LocalResource.newInstance(cachedResource,
LocalResourceType.FILE, LocalResourceVisibility.PUBLIC
size, timestamp, null, true);
공유 캐시 관리 (Administrating the Shared Cache)
공유 캐시 설정 (Setting up the shared cache)
관리자는 다음 단계를 따라 공유 캐시를 초기에 설정할 수 있습니다:
- 공유 캐시용 HDFS 디렉터리를 생성합니다(기본값: /sharedcache).
- 공유 캐시 디렉터리 권한을 0755로 설정합니다.
- 공유 캐시 디렉터리가 공유 캐시 관리자 데몬과 노드 관리자를 실행하는 사용자가 소유하도록 보장합니다.
- yarn-site.xml 파일에서
yarn.sharedcache.enabled를 true로,yarn.sharedcache.root-dir를 1단계에서 지정한 디렉터리로 설정합니다. 더 많은 구성 매개변수는 configuration parameters 섹션을 참조하세요. - 공유 캐시 관리자를 시작합니다:
/hadoop/bin/yarn --daemon start sharedcachemanager
구성 매개변수 (Configuration parameters)
구성 매개변수는 yarn-default.xml에서 찾을 수 있으며 yarn-site.xml에 설정해야 합니다. 구성 매개변수와 기본값 목록은 다음과 같습니다:
| Name | Description | Default value | | yarn.sharedcache.enabled | 공유 캐시 활성화 여부 | false | | yarn.sharedcache.root-dir | 공유 캐시의 루트 디렉터리 | /sharedcache | | yarn.sharedcache.nested-level | 체크섬 디렉터리에 도달하기 전의 중첩 디렉터리 수준. 음수여서는 안 됩니다. | 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 | 인메모리 스토어의 리소스는 마지막 참조 이후 경과 시간이 staleness 기간을 초과하면 stale로 간주됩니다. 이 값은 분 단위입니다. | 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(공유 캐시 관리자)의 웹 애플리케이션 주소 | 0.0.0.0:8788 | | yarn.sharedcache.cleaner.period-mins | 청소 태스크가 실행되는 빈도. 분 단위. | 1440 | | yarn.sharedcache.cleaner.initial-delay-mins | 첫 청소 태스크가 스케줄되기 전의 초기 지연. 분 단위. | 10 | | yarn.sharedcache.cleaner.resource-sleep-ms | 각 공유 캐시 리소스를 처리하는 사이에 sleep하는 시간. 밀리초 단위. | 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 |
더 알아보기 (Learn more)
- 원문: 문서