YARN에서 Cgroups 사용하기
YARN에서 Cgroups 사용하기 (Using Cgroups with YARN)
이 문서는 YARN의 컨테이너 리소스(특히 CPU)를 제한하고 격리하기 위해 NodeManager에서 Linux cgroups를 사용하는 방법을 설명합니다. 기본적으로 NodeManager의 LinuxContainerExecutor는 컨테이너의 CPU 사용을 제한하는 데 제한된 기능을 제공합니다. cgroups(control groups)를 활성화하면 CPU, 메모리, 디스크 I/O 등을 그룹 단위로 제어할 수 있어, 한 애플리케이션의 과도한 리소스 사용이 다른 애플리케이션에 영향을 주는 것을 막을 수 있습니다.
출처: 문서
본문
배경 (Background)
YARN 컨테이너는 NodeManager에서 실행됩니다. 기본적인 LinuxContainerExecutor는 컨테이너가 사용할 수 있는 CPU 코어 수를 yarn.nodemanager.resource.cpu-vcores로 할당하지만, 얼마나 많은 CPU 시간을 사용할 수 있는지에 대해서는 강하게 제한하지 않습니다. cgroups를 사용하면 컨테이너 그룹에 CPU 사용 비율/시간을 명시적으로 제한할 수 있습니다.
cgroups 활성화
cgroups 지원을 활성화하려면 conf/yarn-site.xml에서 다음 속성을 설정합니다.
| Property | Default | Description | | yarn.nodemanager.linux-container-executor.cgroups.hierarchy | /hadoop-yarn | cgroups에서 사용할 계층 구조(hierarchy) 경로. | yarn.nodemanager.linux-container-executor.cgroups.mount | false | cgroups에서 지정한 hierarchy를 마운트할지 여부. | yarn.nodemanager.linux-container-executor.cgroups.mount-path | /sys/fs/cgroup | cgroups 파일시스템이 마운트된 경로. | yarn.nodemanager.linux-container-executor.group | hadoop | 컨테이너 실행에 사용되는 그룹. | yarn.nodemanager.linux-container-executor.resources-handler.class | org.apache.hadoop.yarn.server.nodemanager.util.DefaultLCEResourcesHandler | 리소스 처리 핸들러. CPU 제한을 위해 CgroupsLCEResourcesHandler로 설정. | yarn.nodemanager.linux-container-executor.cgroups.strict-resource-usage | false | cgroup의 CPU 제한을 엄격하게 강제할지 여부. | yarn.nodemanager.linux-container-executor.cgroups.delete-delay-ms | 1000 | 컨테이너 종료 후 cgroup을 정리하기 전에 기다리는 시간(밀리초).
CPU 제한을 강제하기 위해 리소스 핸들러를 org.apache.hadoop.yarn.server.nodemanager.util.CgroupsLCEResourcesHandler로 설정합니다. 예:
<property>
<name>yarn.nodemanager.linux-container-executor.resources-handler.class</name>
<value>org.apache.hadoop.yarn.server.nodemanager.util.CgroupsLCEResourcesHandler</value>
</property>
또한 cgroup 계층을 사용하려면 커널이 cgroup을 지원해야 하며, 올바르게 마운트되어 있어야 합니다. 시스템의 cgroup 마운트 지점(보통 /sys/fs/cgroup/cpu)을 확인하고, 컨테이너 실행기(container-executor)가 해당 계층에 접근/생성할 수 있어야 합니다.
CPU 비율 제한
CgroupsLCEResourcesHandler를 사용하면 컨테이너의 yarn.nodemanager.resource.cpu-vcores 요청에 따라 쿼터(quota)가 설정되어, 컨테이너가 요청한 vcore 비율 이상으로 CPU를 사용하지 못하도록 제한합니다. 이는 다중 테넌트 환경에서 한 컨테이너가 클러스터 CPU를 독점하는 것을 방지합니다.
더 알아보기 (Learn more)
- 원문: 문서