yarn application -list
yarn application -list -appStates RUNNING,ACCEPTED
yarn application -list -appTypes MAPREDUCE -appStates RUNNING
yarn application -status application_1234567890123_0001
yarn application -kill application_1234567890123_0001
yarn logs -applicationId application_1234567890123_0001 | head -200
-list 는 기본적으로 SUBMITTED, ACCEPTED, RUNNING 상태만 보여 준다. 끝난 잡을 보려면 -appStates FINISHED,FAILED,KILLED 를 준다. 로그는 로그 집계(yarn.log-aggregation-enable)가 켜져 있어야 yarn logs 로 받을 수 있다.
애플리케이션이 ACCEPTED 에 머물며 진행되지 않는 상태다. ApplicationMaster 컨테이너를 배치할 자원이 없다는 뜻이다. 확인할 지점은 다음과 같다.
큐에 여유가 있는지 본다. ResourceManager 웹 UI(8088)의 Scheduler 화면에서 해당 큐의 사용률과 AM 자원 한도를 확인한다. Capacity Scheduler 는 큐마다 AM 이 쓸 수 있는 비율(maximum-am-resource-percent, 기본 0.1)을 제한하므로, 작은 잡이 많으면 자원이 남아도 AM 을 더 띄우지 못한다.
요청 크기가 노드 용량을 넘지 않는지 본다. yarn.scheduler.maximum-allocation-mb 보다 큰 컨테이너를 요청하면 영원히 배치되지 않는다.
yarn node -list -all
yarn queue -status default
Capacity Scheduler 설정에서 root 큐만 정의하고 자식 큐를 지정하지 않았을 때 난다.
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>default,batch</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.default.capacity</name>
<value>60</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.batch.capacity</name>
<value>40</value>
</property>
같은 레벨 큐들의 capacity 합이 100 이어야 한다. 수정 후 반영한다.
yarn rmadmin -refreshQueues
143 은 128 + 15, 즉 SIGTERM 으로 종료됐다는 뜻이다. YARN 이 컨테이너를 정상 절차로 내린 것이며, 그 자체가 원인은 아니다. 왜 내렸는지를 찾아야 한다.
| 정황 | 원인 |
|---|---|
로그에 beyond physical memory limits. Killing container |
메모리 한도 초과 |
| 사용자가 잡을 죽임 | yarn application -kill |
| 선점(preemption) 발생 | 우선순위 높은 큐가 자원을 회수 |
| 투기적 실행 | 중복 태스크가 정리됨 |
| AM 이 태스크를 재시도하며 이전 시도를 정리 | 정상 동작 |
메모리 초과라면 컨테이너 크기와 JVM 힙을 함께 올린다. 둘 중 하나만 올리면 효과가 없다.
yarn logs -applicationId application_1234567890123_0001 | grep -i 'beyond.*memory'
SET mapreduce.map.memory.mb=4096;
SET mapreduce.map.java.opts=-Xmx3276m;
SET mapreduce.reduce.memory.mb=8192;
SET mapreduce.reduce.java.opts=-Xmx6553m;
JVM 힙은 컨테이너 크기의 75~80% 선으로 잡는다. 나머지는 JVM 자체와 네이티브 메모리가 쓴다.
관련해서 137 은 128 + 9(SIGKILL)로, OS 의 OOM Killer 나 강제 종료를 뜻한다. 원인을 가를 때 함께 본다.
resource-types.xml 은 GPU 같은 사용자 정의 자원 유형을 선언하는 파일이다. 없으면 기본 자원(메모리, vCore)만 쓴다는 뜻이며 대부분 무시해도 된다. 필요하다면 설정 디렉터리에 만든다.
<configuration>
<property>
<name>yarn.resource-types</name>
<value></value>
</property>
</configuration>