Hadoop: YARN 리소스 구성

Hadoop: YARN 리소스 구성

YARN은 확장 가능한 리소스 모델을 지원합니다. 기본적으로 YARN은 모든 노드, 애플리케이션, 큐에 대해 CPU와 메모리를 추적하지만, 리소스 정의는 임의의 "개수 가능한(countable)" 리소스를 포함하도록 확장될 수 있습니다. 개수 가능한 리소스는 컨테이너가 실행되는 동안 소비되고 그 이후에는 해제되는 리소스입니다. CPU와 메모리는 모두 개수 가능한 리소스입니다. 다른 예로는 GPU 리소스와 소프트웨어 라이선스가 있습니다.

출처: 문서

본문

개요 (Overview)

YARN은 확장 가능한 리소스 모델을 지원합니다. 기본적으로 YARN은 모든 노드, 애플리케이션, 큐에 대해 CPU와 메모리를 추적하지만, 리소스 정의는 임의의 "개수 가능한" 리소스를 포함하도록 확장될 수 있습니다. 개수 가능한 리소스는 컨테이너가 실행되는 동안 소비되고 이후에는 해제되는 리소스입니다. CPU와 메모리는 모두 개수 가능한 리소스입니다. 다른 예로는 GPU 리소스와 소프트웨어 라이선스가 있습니다.

또한 YARN은 "리소스 프로파일(resource profiles)" 사용을 지원합니다. 이는 Amazon Web Services Elastic Compute Cluster 인스턴스 유형과 유사하게, 사용자가 단일 프로파일을 통해 여러 리소스 요청을 지정할 수 있게 해줍니다. 예를 들어 "large"는 8 가상 코어와 16GB RAM을 의미할 수 있습니다.

Configuration

다음 구성 속성이 지원됩니다. 자세한 내용은 아래를 참조하세요.

yarn-site.xml:

| Configuration Property | Description | | yarn.resourcemanager.resource-profiles.enabled | 리소스 프로파일 지원이 활성화되었는지 여부. 기본값은 false입니다. |

resource-types.xml:

| Configuration Property | Description | | yarn.resource-types | 추가 리소스의 콤마 구분 목록. memory, memory-mb, vcores는 포함할 수 없습니다. | yarn.resource-types..units | 지정된 리소스 유형의 기본 단위. | yarn.resource-types..minimum-allocation | 지정된 리소스 유형의 최소 요청. | yarn.resource-types..maximum-allocation | 지정된 리소스 유형의 최대 요청.

node-resources.xml:

| Configuration Property | Description | | yarn.nodemanager.resource-type. | 노드 관리자에서 사용 가능한 지정된 리소스의 개수.

resource-types.xml과 node-resources.xml 파일을 사용한다면 yarn-site.xml과 같은 구성 디렉터리에 배치해야 한다는 점에 유의하세요. 또는 해당 속성을 yarn-site.xml 파일에 직접 넣을 수도 있습니다.

YARN 리소스 모델

Resource Manager

리소스 관리자는 클러스터에서 추적되는 리소스의 최종 중재자입니다. 리소스 관리자는 XML 구성 파일에서 리소스 정의를 로드합니다. 예를 들어 CPU와 메모리에 더해 새 리소스를 정의하려면 다음 속성을 구성해야 합니다:

<configuration>
  <property>
    <name>yarn.resource-types</name>
    <value>resource1,resource2</value>
    <description>
    The resources to be used for scheduling. Use resource-types.xml
    to specify details about the individual resource types.
    </description>
  </property>
</configuration>

유효한 리소스 이름은 문자로 시작해야 하며 문자, 숫자, 그리고 '.', '_', '-' 중 하나만 포함해야 합니다. 유효한 리소스 이름은 선택적으로 네임스페이스 뒤에 슬래시가 오는 형태로 앞에 붙을 수도 있습니다. 유효한 네임스페이스는 마침표로 구분된 문자, 숫자, 대시 그룹으로 구성됩니다. 예를 들어 다음은 유효한 리소스 이름입니다:

  • myresource
  • my_resource
  • My-Resource01
  • com.acme/myresource

다음은 유효하지 않은 리소스 이름의 예입니다:

  • 10myresource
  • my resource
  • com/acme/myresource
  • $NS/myresource
  • -none-/myresource

정의된 각 새 리소스 유형에 대해 리소스 유형의 기본 단위를 설정하는 선택적 단위 속성을 추가할 수 있습니다. 유효한 값은 다음과 같습니다:

| Unit Name | Meaning | | p | pico | | n | nano | | u | micro | | m | milli | | (공백) | 기본값, 즉 단위 없음 | | k | kilo | | M | mega | | G | giga | | T | tera | | P | peta | | Ki | 2진 kilo, 즉 1024 | | Mi | 2진 mega, 즉 1024^2 | | Gi | 2진 giga, 즉 1024^3 | | Ti | 2진 tera, 즉 1024^4 | | Pi | 2진 peta, 즉 1024^5 |

속성 이름은 yarn.resource-types.<resource>.units여야 합니다. 정의된 각 리소스는 선택적 최소/최대 속성도 가질 수 있습니다. 속성 이름은 yarn.resource-types.<resource>.minimum-allocation과 yarn.resource-types.<resource>.maximum-allocation이어야 합니다.

yarn.resource-types 속성과 모든 단위, 최소, 최대 속성은 일반적인 yarn-site.xml 파일이나 resource-types.xml이라는 파일에 정의할 수 있습니다. 예를 들어 다음은 어느 파일에든 나타날 수 있습니다:

<configuration>
  <property>
    <name>yarn.resource-types</name>
    <value>resource1, resource2</value>
  </property>

  <property>
    <name>yarn.resource-types.resource1.units</name>
    <value>G</value>
  </property>

  <property>
    <name>yarn.resource-types.resource2.minimum-allocation</name>
    <value>1</value>
  </property>

  <property>
    <name>yarn.resource-types.resource2.maximum-allocation</name>
    <value>1024</value>
  </property>
</configuration>

Node Manager

각 노드 관리자는 그 노드에서 사용 가능한 리소스를 독립적으로 정의합니다. 리소스 정의는 각 사용 가능한 리소스에 대한 속성을 설정하여 수행됩니다. 속성 이름은 yarn.nodemanager.resource-type.<resource>여야 하며 일반적인 yarn-site.xml 파일이나 node-resources.xml 파일에 배치할 수 있습니다. 속성의 값은 노드가 제공하는 해당 리소스의 양이어야 합니다. 예를 들어:

<configuration>
 <property>
   <name>yarn.nodemanager.resource-type.resource1</name>
   <value>5G</value>
 </property>

 <property>
   <name>yarn.nodemanager.resource-type.resource2</name>
   <value>2m</value>
 </property>

</configuration>

이 리소스에 사용되는 단위가 리소스 관리자가 보유한 정의와 일치할 필요는 없다는 점에 유의하세요. 단위가 일치하지 않으면 리소스 관리자가 자동으로 변환을 수행합니다.

MapReduce와 함께 리소스 사용하기

MapReduce는 YARN에서 세 가지 종류의 컨테이너를 요청합니다: 애플리케이션 마스터 컨테이너, map 컨테이너, reduce 컨테이너. 각 컨테이너 유형에 대해 요청된 리소스를 설정하는 데 사용할 수 있는 대응하는 속성 집합이 있습니다.

MapReduce에서 리소스 요청을 설정하는 속성은 다음과 같습니다:

| Property | Description | | yarn.app.mapreduce.am.resource.mb | 애플리케이션 마스터 컨테이너에 요청된 메모리를 MB 값으로 설정합니다. 더 이상 선호되지 않습니다. yarn.app.mapreduce.am.resource.memory-mb를 사용하세요. 기본값 1536. | yarn.app.mapreduce.am.resource.memory | 애플리케이션 마스터 컨테이너에 요청된 메모리를 MB 값으로 설정합니다. 더 이상 선호되지 않습니다. yarn.app.mapreduce.am.resource.memory-mb를 사용하세요. 기본값 1536. | yarn.app.mapreduce.am.resource.memory-mb | 애플리케이션 마스터 컨테이너에 요청된 메모리를 MB 값으로 설정합니다. 기본값 1536. | yarn.app.mapreduce.am.resource.cpu-vcores | 애플리케이션 마스터 컨테이너에 요청된 CPU를 값으로 설정합니다. 더 이상 선호되지 않습니다. yarn.app.mapreduce.am.resource.vcores를 사용하세요. 기본값 1. | yarn.app.mapreduce.am.resource.vcores | 애플리케이션 마스터 컨테이너에 요청된 CPU를 값으로 설정합니다. 기본값 1. | yarn.app.mapreduce.am.resource. | 애플리케이션 마스터 컨테이너에 대해 요청된 의 수량을 값으로 설정합니다. 단위가 지정되지 않으면 리소스의 기본 단위가 가정됩니다. | mapreduce.map.memory.mb | 모든 map 태스크 컨테이너에 요청된 메모리를 MB 값으로 설정합니다. 더 이상 선호되지 않습니다. mapreduce.map.resource.memory-mb를 사용하세요. 기본값 1024. | mapreduce.map.resource.memory | 모든 map 태스크 컨테이너에 요청된 메모리를 MB 값으로 설정합니다. 더 이상 선호되지 않습니다. mapreduce.map.resource.memory-mb를 사용하세요. 기본값 1024. | mapreduce.map.resource.memory-mb | 모든 map 태스크 컨테이너에 요청된 메모리를 MB 값으로 설정합니다. 기본값 1024. | mapreduce.map.cpu.vcores | 모든 map 태스크 컨테이너에 요청된 CPU를 값으로 설정합니다. 더 이상 선호되지 않습니다. mapreduce.map.resource.vcores를 사용하세요. 기본값 1. | mapreduce.map.resource.vcores | 모든 map 태스크 컨테이너에 요청된 CPU를 값으로 설정합니다. 기본값 1. | mapreduce.map.resource. | 모든 map 태스크 컨테이너에 대해 요청된 의 수량을 값으로 설정합니다. 단위가 지정되지 않으면 리소스의 기본 단위가 가정됩니다. | mapreduce.reduce.memory.mb | 모든 reduce 태스크 컨테이너에 요청된 메모리를 MB 값으로 설정합니다. 더 이상 선호되지 않습니다. mapreduce.reduce.resource.memory-mb를 사용하세요. 기본값 1024. | mapreduce.reduce.resource.memory | 모든 reduce 태스크 컨테이너에 요청된 메모리를 MB 값으로 설정합니다. 더 이상 선호되지 않습니다. mapreduce.reduce.resource.memory-mb를 사용하세요. 기본값 1024. | mapreduce.reduce.resource.memory-mb | 모든 reduce 태스크 컨테이너에 요청된 메모리를 MB 값으로 설정합니다. 기본값 1024. | mapreduce.reduce.cpu.vcores | 모든 reduce 태스크 컨테이너에 요청된 CPU를 값으로 설정합니다. 더 이상 선호되지 않습니다. mapreduce.reduce.resource.vcores를 사용하세요. 기본값 1. | mapreduce.reduce.resource.vcores | 모든 reduce 태스크 컨테이너에 요청된 CPU를 값으로 설정합니다. 기본값 1. | mapreduce.reduce.resource. | 모든 reduce 태스크 컨테이너에 대해 요청된 의 수량을 값으로 설정합니다. 단위가 지정되지 않으면 리소스의 기본 단위가 가정됩니다.

이 리소스 요청은 YARN이 구성된 최소/최대 리소스 값에 맞추거나 구성된 증가분의 배수가 되도록 수정할 수 있다는 점에 유의하세요. YARN 스케줄러 구성의 yarn.scheduler.maximum-allocation-mb, yarn.scheduler.minimum-allocation-mb, yarn.scheduler.increment-allocation-mb, yarn.scheduler.maximum-allocation-vcores, yarn.scheduler.minimum-allocation-vcores, yarn.scheduler.increment-allocation-vcores 속성을 참조하세요.

리소스 프로파일 (Resource Profiles)

리소스 프로파일은 사용자가 단일 프로파일로 리소스 집합을 요청하는 쉬운 방법과 관리자가 리소스가 소비되는 방식을 규제할 수단을 제공합니다.

리소스 유형을 구성하려면 관리자가 resource manager의 yarn-site.xml 파일에서 yarn.resourcemanager.resource-profiles.enabled를 true로 설정해야 합니다. 이 파일은 지원되는 프로파일을 정의합니다. 예를 들어:

{
    "small": {
        "memory-mb" : 1024,
        "vcores" : 1
    },
    "default" : {
        "memory-mb" : 2048,
        "vcores" : 2
    },
    "large" : {
        "memory-mb": 4096,
        "vcores" : 4
    },
    "compute" : {
        "memory-mb" : 2048,
        "vcores" : 2,
        "gpu" : 1
    }
}

이 예에서 사용자는 서로 다른 리소스 설정을 가진 네 개의 프로파일에 접근할 수 있습니다. compute 프로파일에서 관리자가 위에서 설명한 대로 추가 리소스를 구성했음에 유의하세요.

프로파일 요청 (Requesting Profiles)

distributed shell이 현재 리소스 프로파일을 지원하는 유일한 클라이언트입니다. distributed shell을 사용하면 사용자가 리소스 프로파일 이름을 지정할 수 있으며, 이는 자동으로 적절한 리소스 요청 집합으로 변환됩니다.

예를 들어:

hadoop job $DISTSHELL -jar $DISTSHELL -shell_command run.sh -container_resource_profile small

더 알아보기 (Learn more)