반응형

출처: http://over153cm.tistory.com/entry/맵리듀스란-2

 

맵리듀스 과정에서 데이터가 어떤 식으로 흘러가고 처리되는지 자세히 알아봅시다.

 

잡 실행과정

1:N방식

1 - 잡 트래커(노드)

N - 태스크 트래커(노드)

 

  • 잡 트래커: 태스크 트래커가 수행할 태스크를 스케줄링 함으로써 시스템 전체에서 모든 잡이 수행되도록 조절.
  • 태스크 트래커: 태스크를 수행하고 각 잡의 전체 경과를 하나의 레코드로 유지하는 경과 보고서를잡 트래커에 보냄. (태스크가 실패하면 잡 트래커는 그것을 다른 태스크 트래커에 다시 스케줄 한다.
  • 입력스플릿&스플릿: 맵리듀스 잡의 입력크기. 각 스플릿마다 하나의 맵 태스크를 생성하고, 그 스플릿에 있는 각 레코드를 사용자 정의 맵 함수로 처리한다.

  • Split

- 하둡은 입력된 데이터를 고정된 크기의 조각으로 나눈다 ⇒ Split

- 각 Split 마다 하나의 Map Task 생성해 그 split의 레코드를 Map함수로 처리한다.

- 전체 입력을 통째로 처리하는 것 보다 시간이 더 짧게 걸린다.

- 보통 64MB의 HDFS Block을 사용하는 추세이다.

 

  • Map Tasks Status 

① Data–local

: HDFS 내의 입력 Data가 있는 노드에서 Map Task 실행

- 데이터 지역성 최적화(Data Locality Optimization). 네트워크 대역폭을 사용하지 않아 가장 잘 작동

② Rack–local

: 동일 랙 중 다른 노드에서 찾아와 실행

- HDFS 블록 복제 본이 저장된 세 개의 노드 모두가 다른 맵 태스크 실행 중일 때도 있다. 이럴 경우 잡트래커는 블록 복제 본이 저장된 동일 랙 중 다른 노드에서 이용 가능한 맵 슬롯 가져온다.

③ Off-rack

: 다른 외부 랙의 노드에서 찾아와 실행

- 랙 간 네트워크 전송을 해야만 하기 때문에 네트워크 대역폭 사용.

    



각 태스크 결과물 저장 장소 

맵리듀스 데이터 흐름

- 리듀스 태스크 개수는 독립적으로 지정한다. (입력 크기와는 관련X)

→ 클러스터 내 리듀서 슬롯의 개수 보다 약간 작게 설정하는 것이 가장 좋다.

 

  1. 단일 리듀스 태스크

: 모든 중간 데이터를 혼자 처리해야 해서 매우 느려진다.


















2. 다중 리듀스 태스크

: Map 태스크는 Reduce 태스크 개수만큼 파티션을 생성하고 결과를 분배한다.













3. 리듀스 태스크 없음 

: 완전히 병렬로 수행. 셔플이 필요없는 경우에 적합.


 










컴바이너 함수 (Combiner Function)

대역폭은 제한적. 따라서 데이터 전송은 줄일수록 좋다.

- 맵과 리듀스 태스크 간 데이터전송을 최소화 하는 것이 좋다.

- 최적화와 관련 있기 때문에 필수 사항은 아니다. 0번을 써도, 여러 번 호출 되도 출력 결과는 같다.

- 매퍼와 리듀서 사이에서 셔플할 데이터의 양을 줄이는데 큰 도움을 준다.



[참고] http://blog.secmem.org/

        http://bigbigdata.tistory.com/

반응형

+ Recent posts