7. YARN Daemons
Resource Manager(RM)
• master node에서 동작
• global resource scheduler
• application들의 자원 요구의
할당 및 관리
7
Node Manager(NM)
• slave node에서 동작
• node의 자원을 관리
• container에 node의 자원을
할당
8. YARN Daemons
Containers
• RM의 요청에 의해 NM에서 할당
• slave node의 CPU core,
memory의 자원을 할당
• applications은 다수의 container로
동작
8
Application Master(AM)
• application당 한 개씩 존재
• application의 spec을 정의
• container에서 동작
• application task를 위해 container
할당을 RM에게 요청
10. Why is YARN needed?
• Cluster의 확장성
• HADOOP 1
• 클러스터의 규모와는 상관없이 Job Tracker의 개수는 1개 (병목 지점)
• 예를 들어 4000개의 노드로 구성된 클러스터에 단 1개의 JobTracker가 모든 노드의
job을 관리
• HADOOP 2 YARN
• Job Tracker의 기능을 Resource Manager와 Application Master로 분리
• 클러스터에는 여러개의 Application이 동작 가능
• 각 Application은 Application Master가 모든 task를 관리
10
Job Tracker
Resource
Manager
Application
Master
Application
Master
Application
Master
12. Why is YARN needed?
• Application 호환성
• HADOOP 1
12
• MapReduce외에 다른 Application은 클러스터의 자원을 공유할 수 없는 문제
• HADOOP 2 YARN
• 같은 클러스터내에서 M/R와 다른 application을 실행할 수 있도록 지원
13. Why is YARN needed?
• 자원 할당의 유연성
• HADOOP 1
• Slot에 미리 자원(memory, cpu cores)를 할당 후 미리 정해진 설정에 따라서
slot을 job에 할당
• Job이 모두 끝나기 전까지는 자원이 반납되지 않는 문제
• HADOOP 2 YARN
• 요청이 있을 때마다 요구하는 자원의 spec에 맞게 자원을 container의
개념으로 할당
• container마다 다른 spec의 자원을 갖을 수 있음
• 모든 task는 container에서 수행되고 task가 끝나는 즉시 자원을 반납
13
44. FIFO Scheduler (Hadoop v 1.x)
44
• Hadoop 1.x의 기본 스케줄러
• 우선순위를 부여하여 각 우선순위마다 FIFO큐를 갖을 수 있다
• 5단계의 우선순위 존재 (very high, high, normal, low, very low)
• 높은 우선순위의 큐부터 slot을 할당받기 때문에, 낮은 순위의 큐는
기아현상 발생
• 기아현상의 단점을 보완하기 위해 Fair 스케줄러 사용
• 실험, 테스트 용도의 소형 클러스터 외에는 사용하는 것을 권장하지
않음
45. Fair Scheduler (Hadoop v 1.x)
45
FIFO와 달리 task slot을 pool에 부여하고 사용자는 자신이 사용하는
pool의 slot을 이용
• Pool
• 각 사용자가 공평하게 클러스터를 공유하기 위해 각 사용자는
pool을 갖는다
• 각 pool을 보장된 최소 slot 수용량을 설정 가능
• 단일 job을 수행중일 때 클러스터의 모든 자원을 독점
• 특정 사용자(pool)가 더 많은 job을 제출해도 한정된 task slot에 의해 더
많은 클러스터의 자원을 할당받지 못함
• job에서 실행중인 모든 task가 끝나면 해당 slot을 다른 pool에 할당
46. Fair Scheduler (Hadoop v 1.x)
• Slot
• 모든 slot은 동일한 cpu time을 점유
• 같은 조건의 pool일 때 모든 pool은 동일한 slot과 cpu time을 점유
• FIFO로 동작
• Preemption
• 자원을 공평하게 할당 받지 못했을 때 다른 pool의 slot을 선점
• mapred.fairscheduler.preemption에서 설정 (기본값: false)
46
• 미리 설정한 preemption.timeout보다 긴 시간 동안 자원을 할당받지
못할 때
• 수용량 이상의 자원을 할당받은 pool의 job을 kill하고 slot을 선점
• 선점된 slot에서 실행 중이던 job는 자원을 재 할당받아 처음부터 재실행
• 선점되는 job은 가장 최근에 실행된 job
• 그동안 실행된 연산의 결과가 없어지는 기회비용 최소화
47. 47
Capacity Scheduler (Hadoop v 2.x)
• Hadoop 2.x YARN의 기본 스케줄러
• yarn.resourcemanager.scheduler.class
• org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.Capacity
Scheduler
• 큐의 계층화 및 capacity 설정을 위해 별도의 설정 필요
• capacity-scheduler.xml
• 다수의 큐로 구성하여 계층화 할 수 있다
• 하나의 큐는 다른 큐의 자식일 수 있다 (트리구조)
• root 큐가 존재하고 클러스터 전체 큐를 서브 큐로 갖는다
• 각 큐는 할당된 capacity가 있어 각 사용자가 클러스터를 개별적으로
사용하는 효과
• hadoop 2.x에서 preemption이 사라졌으며 추가할 계획이 없음
48. 48
Capacity Scheduler Configuration
• yarn.scheduler.capacity.<queue-path>.queues
• 해당 큐의 서브 큐를 정의 ( , )로 구분
• yarn.scheduler.capacity.<queue-path>.capacity
• 상위 큐에서 해당 큐가 최소로 할당받을 수 있는 capacity를 정의(0~100)
• yarn.scheduler.capacity.<queue-path>.maximum-capacity
• 상위 큐에서 최대로 할당받을 수 있는 capacity정의(0~100)
• yarn.scheduler.capacity.<queue-path>.state
• 큐의 실행 상태 <STOPPED, RUNNING>
• yarn.scheduler.capacity.<queue-path>.user-limit-factor
• 큐의 자원이 가용한 범위내에서 단일 user가 점유할 수 있는 자원의
한계(0~1)
58. Fault Tolerance
• Task(Container) – 기존 방식과 동일
58
• MRAppMaster는 task가 멈추거나 예외가 발생하면 다시 시작하도록
시도
• 기본 4번: mapred.map.max.attempts, mapred.reduce.max.attempts)
• task가 너무 많이 실패할 경우 application이 실패했다고 간주
• 강제로 종료된 task의 경우 실패로 간주하지 않음
• Application Master
• AM가 heartbeat을 보내는 것을 멈추면, RM은 AM을 다시 시작하도록
시도
• 기본 2번: yarn.resourcmanager.am.maxretries
• MRAppMaster의 optional setting: Job recovery
• if false, 모든 task들이 다시 시작
• if true, 실패한 task만을 다시 실행시켜 MRAppMaster의 task의 상태를 회복
59. Fault Tolerance
• Node Manager
59
• NM가 heartbeat을 RM으로 보내는 것을 중단 할 경우, RM은 해당
node를 active node에서 제외.
• 기본 10분: yarn.resourcemanager.nm.liveness-monitor.expiry-interval-ms
• MRAppMaster에 의해서 해당 node의 task들은 실패한 것으로 간주.
• AppMaster가 있는 node가 실패할 경우, application의 실패로 간주.
• Resource Manager
• RM이 작동을 멈출 경우, 어떠한 job, task도 container에 배치 불가
• HA(High Availability)를 지원하도록 설정 가능