1. 맵리듀스가 무엇인가?

 - 분산된 수많은 노드에 대용량 데이터 처리를 수행함으로써 배치 작업, 관리하는 프레임워크이다. 


2. 맵리듀스 이전 데이터 처리 방식의 한계

 - 데이터를 분석하는데 병렬로 수행한다고 가정한다면 이러한 문제점이 있다.(맵리듀스 사용하지 않을 경우)

  1) 파일크기에 따라서 몇몇 프로세스 처리가 빠른 경우가 있고 느린 경우가 있을 것이다. 빠른 경우엔 추가로 다른 일을 할 순 있겠지만 결국엔 가장 큰 파일에 의해 처리 수행속도가 판가름 날 것이다.

  2) 결과를 조합하는데 있어서 더 많은 처리가 필요할 수 있다. 예를들면 연도별로 데이터를 나누는데 이를 정렬시키고 조합시키는데 처리가 더 필요하다는 것이다.

  3) 단일 서버의 처리 능력은 한계가 있다.


3. 맵리듀스 이해

 1) 간략한 맵리듀스 동작


그림 1) 맵리듀스 동작

(http://withfriendship.com/user/mithunss/mapreduce.php)


 - 위 그림은 맵리듀스를 이해하는데 있어 좋은 예제인 것 같아 퍼오게 되었다. 먼저 맵함수에 들어가기전에 각각 다른 모양과 색깔을 가진 도형들이 있다. 맵함수에서는 같은 도형의 수와 서로다른 도형들을 분류 및 정렬한다. 그리고 맵함수에 출력물을 가지고 리듀스함수에 입력에 사용하여 결과를 나타낸다. 

 헷갈리신다면 도형들을 한 문장으로 생각해도 좋다. 예를 들어 '나의 성격은 나의 행위의 결과이다.'의 문장을 도형의 묶음으로 보고 나의, 성격은, 나의, 행위의, 결과이다 각각 단어를 하나의 도형으로 보면 된다. 구글에서는 이를 이용해서 엄청난 양의 데이터를 처리하여 서비스 한다. 그만큼 맵리듀스는 분산환경 및 대용량 데이터를 처리하는데 효과적인 프레임워크라고 생각한다.

깊은 내용은 각자 서치로^^



 2) 데이터 흐름

 - 두가지 유형 노드

   (1) 잡 트래커 : 태스크트래커들이 수행할 태스크들을 스케줄링하여 시스템 전체에 모든 잡들이 수행되도록 조절함

   (2) 태스크트래커 : 태스크들을 수행하고 각 잡의 전체 경과를 하나의 레코드로 유지하는 경과 보고서를 잡트래커에 보낸다.



그림 2) 다중 리듀스 태스크의 맵리듀스 데이터 흐름

(http://ypshin.com/2690309)


 - 하둡은 맵리듀스의 잡의 입력을 스플릿이라 불리는 고정 크기 조각들로 나눈다. 하둡은 각 스플릿마다 하나의 맵 태스크를 생성하고, 그 스플릿에 있는 각 레코드를 사용자 정의 맵 함수로 처리한다.

 - 맵 태스크의 결과는 HDFS가 아닌 로컬 디스크에 저장된다. 이유는 맵의 결과는 중간결과물일 뿐 잡이 완료되면 맵의 결과는 필요가 없어지기 때문이다. 그리고 만약 맵 태스크를 실행하는 노드가 리듀스에 의해 맵의 결과를 사용하다 실패하면 하둡은 다시 맵 태스크를 또 다른 노드로 전달하여 맵의 출력을 재생성한다.

 - 리듀스 태스크는 맵함수의 출력으로 입력을 받는다. 리듀스의 출력에 대한 각 HDFS 블록은 첫 복제본이 로컬 노드에 저장되고, 그 이외의 복제복은 자신이 속해있지 않은 곳에 저장된다.(이래서 지워야할 해당 데이터들을 찾기가 어렵다는 뜻인가...)

+ Recent posts