본문 바로가기
카테고리 없음

[하둡 완벽 가이드] Chapter 4 YARN

by 양진주 2024. 3. 28.

아파치 YARN: 하둡의 클러스터 자원 관리 시스템 (맵리듀스 + 분산 컴퓨팅 도구 지원)

 

4.1YARN 애플리케이션 수행 해부해보기

YARN: 리소스 매니저 + 노드 매니저 ➡️ 핵심 서비스 제공

- 리소스 매니저: 클러스터 유일, 클러스터 전체 자원 사용량 관리

- 노드 매니저: 모든 머신에서 실행, 컨테이너 구동 + 모니터링 

 

클라이언트: 리소스 매니저 접속 ➡️ 애플리케이션 마스터 프로세스 구동 요청 ➡️ 리소스 매니저: 컨테이너에서 애플리케이션 마스터를 시작할 수 있는 노드 매니저 찾음 (➡️ 애플리케이션 마스터: 더 많은 컨테이너 요청 ➡️ 분산 처리 수행) 

 

YARN 자체: 애플리케이션(클라이언트, 마스터, 프로세스) 상호 통신 기능 제공 ❌ ➡️ 주요 YARN 애플리케이션: 원격 호출 방식 사용

4.1.1 자원 요청

 

YARN: 유연한 자원 요청 모델

각 컨테이너에 필요한 컴퓨터 자원 용량 + 해당 요청에 대한 컨테이너 지역성 제약(e.g., 특정 노드/랙/외부 랙에서 컨테이너 요청) 표현 ➡️ 대역폭 효율적 활용

if 지역성 제약 불가능 ➡️ 할당 실패 / 선택적으로 제약 느슨하게 적용 

 

4.1.2 애플리케이션의 수명

- 하나의 애플리케이션 / 사용자의 잡 

    e.g., 맵리듀스 잡 

 

- 하나의 애플리케이션 / 사용자의 잡 세션 ➡️ 동일한 컨테이너 재사용, 잡 사이에 공유 데이터 캐싱 

    e.g., 스파크

 

- 장기 실행 애플리케이션(서로 다른 사용자 공유): 코디네이션 역할 수행 

 

4.1.3 YARN 애플리케이션 만들기

아파치 슬라이더: 기존의 분산 애플리케이션 YARN 위에서 실행 가능 

아파치 트윌: 간단한 프로그래밍 모델 추가 제공(e.g., 로깅, 명령 메시지)

 

4.2 YARN과 맵리듀스 1의 차이점 

맵리듀스1: 잡트래커 + 태스크트래커 ➡️ 잡 스케줄링, 태스크 진행 모니터링 

- 잡트래커: 여러 태스크트래커에서 실행되는 태스크 스케줄링 ➡️ 시스템에서 실행되는 모든 잡 조율 

- 태스크트래커: 태스크 실행, 진행 상황 잡트래커 전송 ➡️ 각 잡의 전체적인 진행 상황 파악 

if 태스크 실패 ➡️ 잡트래커: 다른 태스크트래커에 다시 스케줄링 

 

맵리듀스2: YARN 사용

YARN: 리소스 매니저 + 애플리케이션 마스터 ➡️ 잡 스케줄링, 태스크 진행 모니터링 

태스크트래커 = YARN 노드 매니저

MapReduce1 YARN
잡트래커 리소스 매니저, 애플리케이션 마스터, 타임라인 서버
태스크트래커 노드 매니저
슬록 컨테이너

 

YARN의 이점 
- 확장성: 1,000노드, 100,000 태스크까지 확장 가능(맵리듀스1: 4,000노드, 40,000 태스크까지)
- 가용성: 상태 정보 항상 복사 ➡️ 서비스 데몬 문제 발생 시 다른 데몬이 작업 이어받음
- 효율성: 정해진 개수의 슬롯 ❌, 리소스 풀 관리 + 자원 잘게 쪼갬 ➡️ 필요한 만큼만 자원 요청 
- 멀티테넌시(다중 사용자): 다양한 분산 애플리케이션 수용 

 

4.3 YARN 스케줄링

4.3.1 스케줄러 옵션 

YARN: FIFO, 캐퍼시티(가용량), 페어(균등) 스케줄러 제공 

- FIFO 스케줄러: 순차적 선입선출 방식 

- 캐퍼시티(가용량) 스케줄러: 작은 잡 ➡️ 분리된 (예약된) 전용 큐에서 처리 

- 페어(균등) 스케줄러: 모든 잡의 자원 동적 분배 

  FIFO 캐퍼시티(가용량) 페어(균등)
장점 이해 쉬움, 설정 필요 ❌   자원 가용량 예약 필요 ❌
클러스터 효율성 ⬆️, 작은 잡 빨리 처리 
단점 대형 애플리케이션 수행 시
자원 점유
전용 큐: 잡을 위한 자원 미리 예약
➡️ 전체 클러스터의 효율성 ⬇️

대형 잡은 FIFO보다 늦게 처리 
 

 

 

4.3.2 캐퍼시티 스케줄러 설정 

큐 탄력성: 큐 內 다수의 잡 존재, 가용 가능 자원 有 ➡️ 캐퍼시티 스케줄러: 해당 큐의 잡에 여분의 자원 할당 ➡️ 큐의 가용량 초과 

root
    - prod (40%) ➡️ 클러스터 25% 즉시 사용 가능,클러스터 100% 사용 가능 
    - dev (60%): 최대 가용량 75% 제한 ➡️ 클러스터 100% 사용 불가 
        - eng
        - science
<?xml version="1.0"?>
<configuration>
	<property>
    	<name>yarn.schedular.capacity.root.queues</name>
        <value>prod,dev</value>
    </property>
    <property>
    	<name>yarn.schedular.capacity.root.dev.queues</name>
        <value>eng, science</value>
    </property>
    <property>
    	<name>yarn.schedular.capacity.root.prod.capacity</name>
        <value>40</value>
    </property>
    <property>
    	<name>yarn.schedular.capacity.root.dev.capacity</name>
        <value>60</value>
    </property>
    <property>
    	<name>yarn.schedular.capacity.root.dev.maximun-capacity</name>
        <value>75</value>
    </property>
    <property>
    	<name>yarn.schedular.capacity.root.dev.eng.capacity</name>
        <value>50</value>
    </property>
    <property>
    	<name>yarn.schedular.capacity.root.dev.science.capacity</name>
        <value>50</value>
    </property>
</configuration>

 

4.3.3 페어 스케줄러 설정 

페어 스케줄러: 실행 중인 모든 애플리케이션에 동일하게 자원 할당(큐 사이에만 실제로 적용)

사용자 A 잡 시작(100% 점유) ➡️ 사용자 B 잡 시작(A - 50%, B - 50%) ➡️ 사용자 B 두 번째 잡 시작(A - 50%, B1 - 25%, B2 - 25%) 

∴ 자원은 사용자 사이에만 균등하게 적용