SW Engineering/Hadoop

맵리듀스(MapReduce) 작동방식

SungWookKang 2015. 7. 22. 09:29
반응형

맵리듀스(MapReduce) 작동방식 

   

맵리듀스 시스템에서 어떻게 맵리듀스가 작동하는지 알아보자. 다음 그림은 각 단계별 처리되는 과정을 나타낸 것이다. 

   

[1단계, Split Input(분할 입력)] 

첫 번째 단계와 다음 단계의 대규모 병렬처리의 핵심은 여러 조각으로 입력을 분할 하는 것이다. 이 작업은 split 또는 Shard라 불린다. 맵리듀스 라이브러리는 분할 작업을 수행한다. 입력 데이터가 HDFS의 기본 블록 사이즈인 64MB 보다 큰 경우에만 입력 스플릿이 생성된다. 분할의 실제 형태는 데이터의 위치와 형태에 관련되어 있을 수 있다. 맵리듀스는 타입에 따라 사용자 지정 또는 기본 포맷을 사용할 수 있다.  

   

분할 스플릿은 잡이 수행되는 시간에 큰 영향을 끼친다. 입력 데이터를 분리하지 않는 것보다 여러 입력 스플릿으로 분리하면 작업시간이 더 짧아지며 스플릿이 많을수록 더 큰 부하 분산효과를 보게 된다. 하지만 너무 작은 스플릿은 이를 관리하는 것과 맵태스트를 생성하는데 더 큰 부하를 발생시키기도 한다. 

 

   

   

[2단계, Fork Processes] 

다음 단계는 마스터와 작업자를 생성한다. 마스터는 작업자들에게 잡을 분배하고 진행상황을 추적하고 결과를 반환할 책임이 있다. 마스터는 유휴 작업자에게 작업을 할당 한다. 

 

   

   

[3단계, Map] 

각 맵태스크는 입력된 샤드에서 데이터를 읽는다. 읽은 데이터를 파싱하고, 분석하고 그 데이터(키, 값)쌍을 생성한다. 많은 맵 태스크가 병렬로 작업을 수행 함으로써 작업 성능을 확장 할 수 있다. 

 

   

   

[4단계, Map worker : Partition] 

맵 태스크 생성한 (키, 값) 스트림은 메모리 버퍼와 디스크에 저장된다. 기본 파티션 기능은 단순히 키 모듈R을 해시하지만 특정 키를 가질 필요가 있을 경우 사용자 정의 파티션 함수로 대체 할 수있다. 

 

   

   

[5단계, Reduce Sort(Shuffle)] 

모든 맵 태스크가 작업을 완료하면 마스터는 리듀스 태스크의 시작을 알린다. 리듀스 태스크는 자신이 필요한 맵 태스크의 모든 출력 데이터가 있어야만 작업을 실행 할 수 있다. 리듀스 태스크는 주기적으로 잡트래커에게 맵 태스트크의 출력 데이터 경로를 물어보며 출력 데이터 경로가 정상적으로 조회되면 해당 출력 데이터를 로컬 노드로 복사한다. 이때 파일이 크면 디스크로 복사하고 작으면 메모리로 복사한다. 

 

   

   

[6단계, Reduce function] 

리듀스 태스크는 모든 맵 태스크의 출력 데이터를 복사 한 후 맵 태스크의 출력 데이터를 병합한다. 병합이 완료되면 리듀스 메소드를 호출해서 분석 로직을 실행 한다. 

 

[7단계, Done] 

모든 실행이 완료되면 마스터는 사용자 프로그램으로 제어를 다시 전달한다. 리듀스 태스크는 출력 데이터를 HDFS에 저장한다.  

   

   

[전체 플로우] 

 

   

   

작업의 실패 처리는 마스터가 주기적으로 각 태스크와 Ping을 한다. 응답이 일정 시간 내에 받지 못하면 실패한 것으로 간주하여 다른 작업자에게 작업을 할당 한다.  

   

[참고자료] 

http://www.cs.rutgers.edu/~pxk/417/notes/content/mapreduce.html 

   

   

2013-10-31 / 강성욱 / http://sqlmvp.kr 

반응형

'SW Engineering > Hadoop' 카테고리의 다른 글

하둡 환경설정 파일 수정  (0) 2015.07.22
하둡 인코딩 방식 설정  (0) 2015.07.22
맵리듀스(MapReduce) 구성  (0) 2015.07.22
맵리듀스(MapReduce) 개념  (0) 2015.07.22
보조 네임노드  (0) 2015.07.22