LabHub
学习 学习路径 课程

Apache Hadoop — HDFS 와 YARN 을 한 파드에 세우고 운영한다 · YARN 컨테이너와 대기열 · 实验

2Gi 파드에 맞춰 컨테이너 크기를 잡고 대기열을 나눈다

在 LabHub 中继续学习

목표

ResourceManager 의 REST API 로 이 클러스터가 내줄 수 있는 자원을 확인하고, 그보다 큰 컨테이너를 달라는 잡이 어떻게 끝나는지 본다. Capacity Scheduler 에 etl·adhoc 대기열을 만들어 잡을 보내고, 없는 대기열이 거절되는 것과 끝난 잡의 로그를 모아 읽는 법까지 다룬다.

왜 중요한가

YARN 은 클러스터의 메모리와 코어를 컨테이너 단위로 나눠 주는 자원 관리자다. NodeManager 는 자기가 내줄 수 있는 몫(yarn.nodemanager.resource.memory-mb)을 알리고, ResourceManager 의 스케줄러는 요청을 최소 할당 단위로 올려 잡고 최대 할당보다 크면 거절한다. 맵리듀스든 Spark 든 YARN 위에서 도는 것은 모두 이 규칙을 따른다.
운영에서 "잡이 ACCEPTED 에서 안 움직여요" 와 "잡이 바로 죽어요" 는 대개 이 숫자들의 문제다. 컨테이너 크기가 노드 몫보다 크면 영원히 자리가 나지 않고, 최대 할당보다 크면 곧바로 거절된다. 이 파드는 메모리가 2Gi 라 노드 몫을 1024MB 로 잡아 두었다 — 숫자가 작아서 규칙이 더 잘 보인다.
대기열은 한 클러스터를 여러 팀이 나눠 쓰는 방법이다. Capacity Scheduler 는 대기열마다 보장 몫(capacity)과 빌려 쓸 수 있는 상한(maximum-capacity)을 둔다. 같은 부모 아래 보장 몫의 합은 100 이어야 하고, 설정 파일을 고친 뒤 refreshQueues 로 다시 읽힌다. 끝난 컨테이너의 로그는 NodeManager 가 HDFS 로 모아 두므로(로그 모으기), 파드가 사라진 뒤에도 yarn logs 로 읽을 수 있다.

단계

1. lab-hadoop start yarn 으로 YARN 을 켜고 curl -s http://localhost:8088/ws/v1/cluster/metrics 응답을 /root/hdp/yarn/metrics.json 에 저장하세요.
2. 예제 jar 의 pi-D mapreduce.map.memory.mb=2048 로 돌려 잡이 끝나게 한 뒤, 그 애플리케이션의 yarn application -status <애플리케이션 ID> 출력을 /root/hdp/yarn/toobig.txt 에 저장하세요.
3. /opt/hadoop/etc/hadoop/capacity-scheduler.xml 을 고쳐 root 아래 대기열을 default,etl,adhoc 로, 보장 몫을 20·50·30 으로, adhoc 의 상한을 50 으로 두고 yarn rmadmin -refreshQueues 한 뒤, yarn queue -status etl 출력을 /root/hdp/yarn/etl.txt 에 저장하세요.
4. /data/books/book-1.txt 를 HDFS /user/root/yarn/in/ 에 올리고 wordcount-D mapreduce.job.queuename=etl/user/root/yarn/wc-etl 에 돌리세요.
5. 같은 wordcount 를 없는 대기열 nope 로 제출해 보고(출력 /user/root/yarn/wc-nope) 오류 출력을 /root/hdp/yarn/badqueue.txt 에 저장하세요.
6. curl -s http://localhost:8088/ws/v1/cluster/scheduler 응답을 /root/hdp/yarn/scheduler.json 에 저장하세요.
7. 4단계 잡의 애플리케이션 로그를 yarn logs -applicationId <애플리케이션 ID> 로 모아 /root/hdp/yarn/etl-logs.txt 에 저장하세요.
8. /root/hdp/yarn/report.md## 컨테이너 크기 ## 대기열 ## 로그 세 절을 쓰세요. 첫 절에 1단계의 totalMB 와 2단계에서 요청한 2048 을 넣으세요.

참고

8个步骤

  1. 클러스터가 내줄 수 있는 것
  2. 최대 할당보다 큰 컨테이너
  3. 대기열 셋 만들기
  4. etl 대기열로 잡 보내기
  5. 없는 대기열은 제출에서 거절된다
  6. 스케줄러가 보는 대기열
  7. 끝난 잡의 로그 모아 읽기
  8. 자원의 숫자를 남기기