최초 작성일 : 2013/02/05 15:23
1. 사용자 프로그램에 포함된 MapReduce 라이브러리가 우선 입력 파일을 분할하여
M 조각들로 집어넣는다. 이 조각들은 약 16~64Mb 정도의 크기를 가지며 이 크기는
사용자들이 옵션 인자를 통해 조절 가능하다. 그리고나서 이 프로그램의 복사본들이
클러스터 내의 머신들로 복사되기 시작한다.
2. 이 복사본들 중 하나는 master라고 하여 특별한 기능을 수행한다.
나머지의 것들은 master에 의해 할당된 작업을 수행하는 작업자들이다.
M개의 map task와 R개의 reduce task가 할당 되었다고 해보자. master는 쉬고있는
작업자들을 찾아내 이 map task나 reduce task 중 하나를 할당한다.
3. map task가 할당된 작업자는 입력 분할체에 해당하는 contents를 읽는다.
이 작업자는 읽어들인 contents로부터 key/value 쌍을 뽑아내고 각각의 쌍들을 사용자가
작성한 Map 함수로 전달한다. 이렇게 Map 함수로부터 생성된 중간형태의 key/value쌍은
메모리 버퍼에 저장된다.
4. 주기적으로 버퍼에 저장된 쌍들은 로컬 디스크에 저장되며 분할 함수에 의해 R개의
영역으로 분할된다. 버퍼에 저장된 쌍들이 로컬 디스크에 저장된 위치는 다시 master에게
전달되며 master는 책임지고 전달받은 이 위치를 reduce 업무를 할당받은 작업자에게 할당해준다.
5. reduce 작업자가 master로부터 이 위치에 대해 알림을 받으면 이 작업자는
원격 프로시져 콜을 이용해 map 작업자의 로컬 디스크로부터 저장된 버퍼 데이터를 읽어들인다.
reduce 작업자가 모든 중간데이터를 읽어들이고난 후 reduce 작업자는 중간데이터의
key를 중심으로 데이터를 정렬하게 되고 존재하는 모든 동일키는 그룹으로 묶인다.
보통 많은 서로 다른 맵의 키들이 같은 reduce task로 전달되기 때문에 정렬이 필요하다.
만일 데이터가 너무 커서 메모리가 부족할 경우에는 외부(외부 저장장치를 사용한) 정렬이
사용되기도 한다.
6. reduce 작업자는 모든 정렬된 중간 데이터에 걸쳐서 유일한 중간 키가 도출될 때까지
이 작업을 반복하며 이렇게 도출된 키와 키에 해당하는 중간 값들의 세트를 사용자가
작성한 Reduce 함수로 전달한다. Reduce 함수의 출력값은 최종 출력 파일에 추가된다.
7. 모든 map task와 reduce task가 완료되면 master는 사용자 프로그램을 호출하게 되고
이 시점에서 MapReduce 호출은 사용자의 코드를 반환하게 된다.
이 일련이 과정들이 성공적으로 완료된 후 mapreduce 실행의 결과는 R개의 출력 파일 내에서
볼 수 있을 것이다.(한 개의 reduce task당 R개의 파일이 생성되면 파일명은 사용자가 정의한다)
'Study > 빅데이터' 카테고리의 다른 글
[옛 글] [BigData] MapReduce - Locality 등... (0) | 2013.07.19 |
---|---|
[옛 글] [BigData] MapReduce - master data structure와 고장 허용 범위 (0) | 2013.07.19 |
[옛 글] [BigData] MapReduce - 조금 더 상세하게. (0) | 2013.07.19 |
[옛 글] [BigData] MapReduce란 무었인가? (0) | 2013.07.19 |
[옛 글] [BigData] 학습 시작을 위한 용어 정리 (4) | 2013.07.19 |