리소스 관리자와 스케줄러

이재관·2022년 2월 2일
0

리소스 관리자와 스케줄러

좋은 분산 시스템이 갖춰야할 핵심 요소는 스케줄링과 리소스 관리 기능이다. 하둡에도 효율적인 방법으로 계산 리소스를 할당하고 사용자 애플리케이션을 스케줄링하는 시스템이 존재하며 이를 YARN(Yet Another Negotiator)이라 부른다.
YARN은 스케줄링과 리소스 관리로 데이터 지역성을 극대화하고 계산량이 많은 애플리케이션이 리소스를 독점하지 않게 제어한다. YARN은 교체 가능한(pluggalbe) 스케줄링 시스템을 지원하며 사용자당 리소스 제한이나 작업 대기열당 리소스 할당량 등 공용 리소스 시스템의 스케줄링에 필요한 기본적인 환경 설정을 스케줄러에 입력할 수 있다.
YARN은 클러스터의 리소스를 컨테이너로 분할한다. 컨테이너는 기본적으로 할당되는 CPU 코어 수와 메모리 용량으로 정의되며 추가 리소스(추가 CPU코어, 추가 메모리, GPU, 스토리지)를 포함할 수도 있다. 또한 YARN은 실행 중인 컨테이너들을 모니터링 하면서 컨테이너가 리소스(CPU, 메모리, 디스크, 네트워크 등)의 최대 할당량을 초과하지 않게 억제한다. 다른 워크 플로우 스케줄러와 달리 YARN은 데이터 지역성도 리소스로 제공한다. 다시말해 YARN 애플리케이션(예를 들면 맵리듀스)은 특정 컨테이너가 특정 데이터를 저장하고 있는 서버(또는 특정 데이터와 가깝게 연결된 서버)에서 실행돠도록 요청할 수 있다. 이처럼YARN은 클러스터의 리소스를 컨테이너로 관리함으로써 분산 시스템을 전체적으로 원활하게 운영하고 클러스터의 리소스를 다수의 애플리케이션에 공평한 방식으로 공유한다. 또한 컨테이너를 비공개로 설정할 수 있고 사용자가 요청한 작업을 적절한 시점에서 시작할 수도 있다. 사용자가 요청한 작업을 적절한 시점에 시작할 수도 있다.

분산 데이터 처리 프레임워크

효율적인 데이터 읽기/쓰기(I/O) 기능은 분산 시스템을 구축하는 데 필요한 토대이지만 I/O만으로는 유용한 시스템을 만들 수 없다. YARN은 컴퓨터 클러스터 전체에 계산을 분산하고 HDFS에 보관된 데이터를 확장 가능한 방식으로 처리하는 방법을 추상화해 제공할 뿐이다.

하둡이 맨 처음에 지우너한 데이터 처리 모델은 구글의 맵리듀스이다. 맵리듀스의 개념은 많은 문제를 해결할 수 있고 매우 단순한 모델에 기반을 둔다. 따라서 분산 시스템 문외한도 분산 시스템의 소프트웨어 인프라 구축을 고민할 필요 없이 맵리듀스로 당면한 문제를 해결할 수 있다.

맵리듀스의 병렬 처리 모델은 문제를 맵(Map)단계, 셔플(Shuffle)단계, 리듀스(Reduce)단계로 나눠 수행한다. HDFS의 데이터 지역성과 YARN의 작업 및 리소스 관리 기능 덕분에 맵리듀스는 이 세 단계를 효율적으로 처리할 수 있다.

  • 맵(Map)단계: 입력 데이터가 클러스터에서 병렬로 처리되며 맵 단계를 수행하는 매퍼(mapper)함수는 원시 데이터를 키(key)와 값(value)의 쌍으로 변환한다.
  • 셔플(shuffle)단계: 변환된 데이터는 키를 기주능로 정렬돼 버킷(bucket)으로 셔플링된다.(즉, 키가 같은 값들은 모두 동일한 리듀서(reducer)로 전달된다.)
  • 리듀스(Reduce)단계: 모든 키의 값을 처리하며 결과를 HDFS나 다른 영구 저장소에 저장한다.

맵리듀스의 특징은 맵, 셔플, 리듀스 세 단계가 각각 무상태(stateless)이거나 극히 제한적인 상태만 유지한다는 점이다. 예를들어 실제로 계산하는 매퍼나 리듀서는 현재 입력받은 데이터를 이전에 받은 데이터와 무관하게 처리하는데 이는 각 단계의 매퍼 또는 리듀서가 어느 노드에서 실행될지 알 수 없기 때문이다. 단, 리듀스 단계에서는 키값이 같은 모든 데이터를 참조한다. 이같은 연산 방식은 매우 엉성해 보일 수도 있지만 많은 문제를 해결하기 충분하다.

맵리듀스를 설명하는 가장 표준적인 예시는 대량의 코퍼스(corpus)에 포함된 단어의 빈도를 세는 word-count문제다. 이 문제를 맵리듀스 과정의 단계로 나눠 살펴보자. 우선 텍스트 데이터가 HDFS에 저장되면 하둡은 자동으로 데이터를 블록 단위로 쪼갠뒤 HDFS서버로 분산해 중복 저장한다. 그런 다음 여러 개로 분산된 매퍼가 각 블록을 병렬로 읽어들여 텍스트 데이터에 포함된 단어를 키-값 쌍 하나로 만든다.(즉, 단어가 하나씩 발견될 때마다 키-값 쌍하나(word,1)를 만든다. 이 예제에서는 word라는 단어가 한 번 발견되었다는 뜻이다.) 이 키-값 쌍은 word라는 단어가 나올때마다 하나씩 생성된다. 키-값 쌍이 생성되면 매퍼에서 같은 키를 모두 모아 셔플링한 후 리듀서에 전달한다. 결과적으로 리듀서의 입력 데이터는 특정 단어를 가진 모든 키-값 쌍이 된다. 여기서 리듀서는 같은 단어(같은 키)를 가진 모든 값을 단순히 더하는 계산을 수행한다. 마지막으로 리듀서는 각 단어와 단어별 총 출현 빈도를 파일에 기록한다.

profile
안되면 될 때까지

0개의 댓글