MapReduce 아키텍쳐

시스템 구성

맵리듀스 시스템은 잡트래커, 태스크트래커로 구성된다.

잡트래커(Job Tracker)

하둡에서 실행되는 맵리듀스 프로그램은 잡(job)이라는 단위로 관리된다. 하나의 하둡 클러스터에 하나의 잡트래커가 실행되고, 실행된 잡트래커는 하둡 클러스터에서 실행되는 모든 잡을 스케쥴링한다.

사용자가 새로운 잡을 요청하면, 잡트래커는 잡을 몇개의 맵과 리듀스로 나눌지 계산하고, 어떤 태스크트래커에서 실행시킬지를 결정하여 태스크트래커에 작업 실행 요청을 보낸다.

태스크트래커(Task Tracker)

태스크트래커는 사용자가 구현한 맵리듀스 프로그램을 실행한다. 태스크 트래커는 하둡의 데이터노드에서 실행되며, 잡트래커의 명령을 받아 맵,리듀스 태스크를 생성하여 실행시킨다. 각 태스크는 태스크 트래커 내에서 실행되는 것이 아닌, 새로운 JVM을 구동하여 실행된다.

태스크트래커가 데이터노드에 있어야 하는 이유

데이터 지역성(Data Locality) 때문이다. 맵 리듀스 프로그램에서 사용하는 데이터는 HDFS에 저장된 데이터이고, HDFS에서는 데이터를 여러 대의 서버에 분산저장 한다. 따라서 잡트래커는 잡을 태스크트래커에게 요청할 때, 처리할 데이터가 있는 데이터노드에서 실행되고 있는 태스크트래커에게 요청하여 데이터가 네트워크를 이동하지 않고 로컬 상에서 처리될 수 있도록 한다.

잡트래커의 역할

잡 관리

  • Map 태스크 할당을 제어한다.
  • Reduce 처리에 이용될 수 있도록 Map 태스크 처리 결과 정보를 파악한다.
  • 실행 중인 MapReduce 상의 진행 상황을 정기적으로 클라이언트에게 통지한다.

리소스 관리

  • Map이나 Reduce 처리를 TaskTracker에게 할당한다.
  • 같은 태스크를 복수의 TaskTracker로 병렬 실행 시켜서 가장 빨리 얻은 결과를 사용하도록 처리한다.
  • TaskTracker에서 문제가 발생했을 경우 같은 블록을 처리할 수 있는 다른 TaskTracker에게 처리하게 한다.
  • 동작하지 않는 TaskTracker를 확인하여 처리 멤버에서 제외시킨다.

태스크 트래커의 역할

태스크트래커는 맵리듀스 프렘워크에서 실제로 Map과 Reduce 작업을 실행하는 노드이다. 잡트래커가 실행할 Job이 있더라도 비어있는 태스크트래커가 없다면 태스크가 할당되지 않는다.

태스크트래커 또한 사용자가 작성한 Map과 Reduce 작업을 직접 실행시키지 않는다. 실제 작업을 동작시키는 프로세스를 생성하고, 사용자가 작성한 프로그램의 JAR 파일이나 데이터 등을 전달한다. Child 프로세스의 처리가 완료되면 태스크트래커가 잡트래커에게 처리가 완료되었다는 사실을 알린다.

HDFS와 MapReduce의 관계

스플릿

일반적으로 하둡을 분산처리에 이용하기 위하여 파일의 경우 하둡의 분산 저장 파일 시스템인 HDFS에 저장하게 된다. MapReduce는 데이터가 HDFS에 저장되어 있다는 것을 전제로 실행하기 때문에 처리시에 HDFS에서 데이터를 읽어들인다. Map 태스크의 경우 입력 데이터가 HDFS에 저장된 블록(스플릿)이다. 하나의 파일은 여러개의 스플릿으로 이루어져 있으므로, 병렬 처리가 가능해진다.

데이터 지역성(Data Locality)

MapReduce는 데이터를 동작하고 있는 처리 프로그램으로 옮기는 것이 아니라, 처리 프로그램을 데이터가 있는 곳으로 이동시킨다. 그렇기 때문에, MapReduce의 Map 작업이 이루어질 때는 Shuffle 작업이 이루어지지 않게 된다.

Job ID와 Task ID

MapReduce 처리에는 Job과 Task라는 용어가 사용된다. Job은 사용자가 요청한 MapReduce 프로그램의 단위이다. Task는 MapReduce 프로그램의 Map이나 Reduce의 처리를 위한 단위로, 병렬 실행의 단위가 된다.

  • Job ID : job{JobTracker 식별 ID}{접수 순번}
  • Task ID : Map 처리의 경우 m, Reduce 처리의 경우 r이라는 문자열으로 구분할 수 있다.

Task와 슬롯(Slot)

TaskTracker 안에서 병렬로 실행되는 단위를 슬롯(Slot)이라고 한다. 하나의 TaskTracker 안에서 동시에 실행 가능한 Map슬롯 수와 Reduce 슬롯 수를 TaskTracker 실행 시에 설정할 수 있다. 슬롯이 가득 찬 상태에서는 Map이나 Reduce Task를 할당받을 수 없다.

results matching ""

    No results matching ""