YARN 노드 속성
YARN 노드 속성 (Node Attributes)
자원 보장 없이 노드의 속성을 설명하는 Node Attribute를 소개하는 문서예요. 애플리케이션이 여러 속성의 표현식으로 컨테이너를 배치할 올바른 노드를 고를 수 있게 해 줍니다. 기능, 구성(중앙 집중/분산 매핑), 애플리케이션 지정, 모니터링을 다룹니다.
출처: 문서
본문
개요 (Overview)
Node Attribute는 자원 보장 없이 노드의 속성을 설명하는 방법입니다. 애플리케이션이 이런 여러 속성의 표현식에 기반해 컨테이너를 배치할 올바른 노드를 고르는 데 사용할 수 있어요.
기능 (Features)
Node Attributes의 두드러진 기능은 다음과 같습니다.
- 노드는 여러 속성과 연관될 수 있습니다.
- 노드에 태그된 속성에 값을 연관시킬 수 있습니다. 현재 문자열 타입 값만 지원됩니다.
- Node Labels와 달리 Node Attributes는 클러스터 레벨에서 명시적으로 지정할 필요가 없지만, 클러스터 레벨에서 사용 가능한 속성을 나열하는 API가 있습니다.
- 무형(non tangible) 자원이므로 어떤 큐와도 연관되지 않아, 큐 자원 계획과 인가가 속성에는 필요하지 않습니다.
- 할당 태그와 비슷하게, 애플리케이션은 Placement Constraints 로 이런 속성 중 하나 이상을 포함한 표현식을 사용해 컨테이너를 요청할 수 있어요.
- 표현식에서 지원되는 연산자는 Equals(=)와 Not Equals(!=)뿐입니다. AND & OR도 속성 표현식의 일부로 사용할 수 있습니다.
- 노드 속성 제약은 하드 한계로, 노드가 노드 속성 제약을 충족할 때만 할당이 가능하다는 뜻입니다. 다시 말해 요청은 제약을 충족하는 유효한 노드를 찾을 때까지 대기 상태로 남습니다. 현재 완화(relax) 정책은 없습니다.
- 운영성(Operability)
- 노드 속성과 노드로의 매핑은 RM 재시작을 넘어 복구될 수 있습니다.
- 노드 속성 갱신 — 관리자는 RM이 실행 중일 때 노드에 속성을 추가·제거·교체할 수 있습니다.
- NM에서 노드 속성으로의 매핑은 두 가지 방식으로 할 수 있습니다.
- 중앙 집중(Centralised): 노드-속성 매핑은 RM이 노출한 CLI 또는 RPC로 할 수 있습니다(REST는 아직 미지원).
- 분산(Distributed): 노드-속성 매핑은 NM의 구성된 Node Attributes Provider가 설정합니다. YARN에는 두 프로바이더가 있습니다: Script 기반과 Configuration 기반. 스크립트의 경우 NM에 스크립트 경로를 구성할 수 있고 스크립트가 노드의 속성을 출력합니다. 구성의 경우 node Attributes를 NM의 yarn-site.xml에 직접 구성할 수 있어요. 두 옵션 모두 속성 매핑의 동적 갱신이 지원됩니다.
- 레이블과 달리 속성은 같은 시점에 중앙 집중과 분산 모드 모두에서 노드에 매핑될 수 있습니다. 서로 다른 모드에서 속성이 다른 접두어로 식별되므로 충돌이 없습니다. Centralized의 경우 속성은 접두어 "rm.yarn.io" 로, Distributed의 경우 접두어 "nm.yarn.io" 로 식별됩니다. 이는 속성이 _접두어_와 _이름_으로 고유하게 식별된다는 뜻입니다.
구성 (Configuration)
Node Attributes용 ResourceManager 설정
Node Labels와 달리 Node Attributes는 명시적으로 활성화할 필요가 없습니다. 항상 존재하며, 기능을 사용하지 않아도 성능이나 호환성 면에서 영향이 없기 때문이에요.
yarn-site.xml에 다음 속성을 설정합니다.
| 속성 | 값 | 기본값 |
|---|---|---|
| yarn.node-attribute.fs-store.root-dir | 중앙 집중 속성 매핑이 저장되는 경로 | <file:///tmp/hadoop-yarn-${user}/node-attribute/> |
| yarn.node-attribute.fs-store.impl.class | 구성된 클래스는 org.apache.hadoop.yarn.nodelabels.NodeAttributeStore를 확장해야 함 | FileSystemNodeAttributeStore |
참고:
yarn.node-attribute.fs-store.root-dir가 resource manager 프로세스 사용자로 만들어지고ResourceManager가 접근 권한을 갖는지 확인하세요. (보통 "yarn" 사용자)- 노드 속성을 RM의 로컬 파일 시스템에 저장하려면
file:///home/yarn/node-attributes같은 경로를, hdfs에 저장하려면hdfs://namenode:port/path/to/store/node-attributes/같은 경로를 사용할 수 있습니다.
중앙 집중 Node Attributes 매핑
Centralised 방식에서 속성을 노드에 매핑하는 세 가지 옵션이 지원됩니다.
- add —
yarn nodeattributes -add "node1:attribute[(type)][=value],attribute2 node2:attribute2[=value],attribute3를 실행하면 노드의 기존 매핑에 영향을 주지 않고 노드에 속성을 추가합니다. - remove —
yarn nodeattributes -remove "node1:attribute,attribute1 node2:attribute2"를 실행하면 노드의 기존 매핑에 영향을 주지 않고 노드에서 속성을 제거합니다. - replace —
yarn nodeattributes -replace "node1:attribute[(type)][=value],attribute1[=value],attribute2 node2:attribute2[=value],attribute3"를 실행하면 이 명령의 일부로 구성된 것으로 노드의 기존 속성을 교체합니다.
참고:
- 포트는 언급할 필요가 없습니다. 속성은 노드의 모든 NM 인스턴스에 매핑됩니다.
- 노드-속성 매핑 쌍의 구분자는 공백 입니다.
- 노드의 여러 속성 구분자로 "," 가 사용됩니다.
- "type" 은 지정하지 않으면 기본 string이며, 현재 지원되는 유일한 타입입니다.
- 위 3가지 연산은 모두 관리자 사용자만 수행할 수 있습니다.
분산 Node Attributes 매핑
Distributed 모드에서 노드에 속성을 구성하기:
| 속성 | 값 |
|---|---|
| yarn.nodemanager.node-attributes.provider | 관리자는 NM에서 이 파라미터를 구성해 노드 속성 프로바이더를 구성할 수 있음. 관리자는 프로바이더의 "config", "script" 또는 class name 을 구성할 수 있음. 구성된 클래스는 org.apache.hadoop.yarn.server.nodemanager.nodelabels.NodeAttributesProvider 를 확장해야 함. "config" 를 구성하면 "ConfigurationNodeAttributesProvider", "script" 를 구성하면 "ScriptBasedNodeAttributesProvider" 가 사용됨. |
| yarn.nodemanager.node-attributes.provider.fetch-interval-ms | "yarn.nodemanager.node-attributes.provider" 가 "config", "script" 또는 NodeAttributesProvider를 확장하는 구성된 클래스 로 설정되면 노드 속성이 주기적으로 노드 속성 프로바이더에서 가져와짐. 이 구성은 주기 간격을 정의. -1이면 속성은 초기화 동안에만 프로바이더에서 가져옴. 기본 10분. |
| yarn.nodemanager.node-attributes.provider.fetch-timeout-ms | "yarn.nodemanager.node-attributes.provider" 가 "script" 로 설정되면, 이 구성은 노드 속성을 조회하는 스크립트를 중단할 타임아웃 기간을 제공. 기본 20분. |
| yarn.nodemanager.node-attributes.provider.script.path | NM이 노드 속성을 수집하기 위해 실행하는 노드 속성 스크립트. 스크립트 출력에서 "NODE_ATTRIBUTE:"로 시작하는 줄은 노드 속성의 레코드로 간주되며, 속성 이름, 타입, 값은 쉼표로 구분되어야 함. 각 줄이 노드 속성 하나로 파싱됨. |
| yarn.nodemanager.node-attributes.provider.script.opts | 노드 속성 스크립트에 전달할 인자. |
| yarn.nodemanager.node-attributes.provider.configured-node-attributes | "yarn.nodemanager.node-attributes.provider"가 "config"로 구성되면 ConfigurationNodeAttributesProvider가 이 파라미터에서 노드 속성을 가져옴. |
애플리케이션의 노드 속성 지정
애플리케이션은 Placement Constraint 문서에 설명된 대로 Placement Constraint API를 사용해 노드 속성 요청을 지정할 수 있습니다.
NodeAttribute 표현식으로 Scheduling Request 객체를 만드는 예시:
//expression : AND(python!=3:java=1.8)
SchedulingRequest schedulingRequest =
SchedulingRequest.newBuilder().executionType(
ExecutionTypeRequest.newInstance(ExecutionType.GUARANTEED))
.allocationRequestId(10L).priority(Priority.newInstance(1))
.placementConstraintExpression(
PlacementConstraints.and(
PlacementConstraints
.targetNodeAttribute(PlacementConstraints.NODE,
NodeAttributeOpCode.NE,
PlacementConstraints.PlacementTargets
.nodeAttribute("python", "3")),
PlacementConstraints
.targetNodeAttribute(PlacementConstraints.NODE,
NodeAttributeOpCode.EQ,
PlacementConstraints.PlacementTargets
.nodeAttribute("java", "1.8")))
.build()).resourceSizing(
ResourceSizing.newInstance(1, Resource.newInstance(1024, 1)))
.build();
위 SchedulingRequest는 다음 제약을 충족해야 하는 노드에 컨테이너 1개를 요청합니다.
- 노드 속성
rm.yarn.io/python이 노드에 존재하지 않거나, 존재하지만 값이 3이 아님 - 노드 속성
rm.yarn.io/java가 노드에 존재해야 하고 값이 1.8과 같아야 함
모니터링 (Monitoring)
REST로 모니터링
http://rm-http-address:port/ws/v1/cluster/nodes/{nodeid} REST 출력의 일부로 주어진 노드에 매핑된 속성과 값을 얻을 수 있습니다.
웹 UI로 모니터링
아직 미지원입니다.
명령줄로 모니터링
- 클러스터의 모든 속성을 얻으려면
yarn cluster --list-node-attributes사용. - 클러스터의 속성을 얻으려면
yarn nodeattributes -list사용. - 각 속성에 대해 매핑된 모든 노드와 각 노드에 구성된 속성 값을 나열하려면
yarn nodeattributes -attributestonodes -attributes <Attributes>사용. 선택적으로 -attributes 로 지정된 속성에 대해서만 지정할 수 있음. - 노드에 매핑된 모든 속성과 그 값을 나열하려면
yarn nodeattributes -nodestoattributes -nodes <Host Names>사용. 선택적으로 -nodes 로 지정된 노드에 대해서만 지정할 수 있음. yarn node -status에서 얻은 노드 상태/상세는 노드와 연관된 모든 속성과 값을 나열합니다.
유용한 링크 (Useful links)
- Placement Constraint 구성 방법을 더 이해하려면 Placement Constraint 문서 참고.
더 알아보기 (Learn more)
- 원문: 문서