하둡 맵리듀스(MapReduce)
맵(Map)
맵은 입력받은 데이터를 스플릿(Split) 단위로 분할되며, 하둡은 각 스플릿마다 하나의 맵 태스크를 생성하고, 그 스플릿에 있는 각 레코드를 사용자 정의 맵 함수로 처리합니다. 이때, 스플릿의 단위가 작으면 작업의 부하가 분산되어 성능을 높일 수 있는데, 무조건 작다고 해서 좋은 퍼포먼스를 나타내는것은 아닙니다. 스플릿의 크기가 너무 작으면 맵 작업의 개수가 증가하고 맵 작업 생성을 위한 오버헤드가 증가하여 작업이 느려질 수 있습니다. 일반적으로 맵 작업의 적절한 스플릿 크기는 데이터 지역성의 이점을 얻을 수 있는 HDFS 블록의 기본 크기(128MB)입니다.
맵작업이 HDFS 블록 크기와 같은이유는 클러스터의 네트워크 대역을 사용하지 않고 처리할 수 있기 때문입니다. 만약 데이터가 있는 노드에서 작업을 처리할 수 없다면 동일한 랙의 노드, 다른 랙의 노드 순서로 맵작업이 실행가능한 노드를 찾습니다.
맵 작업의 결과는 HDFS가 아닌 로컬 디스크에 임시로 저장 됩니다. 맵작업은 리듀스작업의 임시결과 값으로 휘발성 데이터이기 때문입니다.
리듀스(Reduce)
리듀스는 분류된 데이터를 입력으로 취하고 키 그룹마다 한번씩 리듀스 함수를 실행합니다. 함수는 키와 해당 키에 관련된 반복된 모든 값을 넘겨 받습니다. 데이터 처리의 많은 부분이 이함수에서 이루어지며, 패턴의 많은 부분을 볼 수 있습니다 또한 여러 가지 방법으로 데이터를 모으고 필터링하고 결합할 수 있습니다.
맵리듀스의 처리단계
- 입력
- 데이터를 입력하는 단계
- 텍스트, csv, gzip 형태의 데이터를 읽어서 맵으로 전달
- 맵(Map)
- 입력을 분할하여 키별로 데이터를 처리
- 컴바이너(Combiner)
- 네트워크를 타고 넘어가는 데이터를 줄이기 위하여 맵의 결과를 정리
- 로컬 리듀서라고도 함
- 컴바이너는 작업의 설정에 따라 없을 수도 있음
- 파티셔너(Partitoner)
- 맵의 출력 결과 키 값을 해쉬 처리하여 어떤 리듀서로 넘길지를 결정
- 셔플(Shuffle)
- 각 리듀서로 데이터 이동
- 정렬(Sort)
- 리듀서로 전달된 데이터를 키 값 기준으로 정렬
- 리듀서(Reduce)
- 리듀서로 데이터를 처리하고 결과를 저장
- 출력
- 리듀서의 결과를 정의된 형태로 저장
아래 이미지는 Word Count Process로 맵리듀스의 기본 동작을 잘 보여주고 있습니다.

출처
위키독스-하둡, 하이브로 시작하기 하둡 버전별 특징 (https://wikidocs.net/26170)
위키독스
온라인 책을 제작 공유하는 플랫폼 서비스
wikidocs.net
한빛미디어-맵리듀스 디자인 패턴(도널드 마이너, 아담슈크)
맵리듀스 디자인 패턴 책 도널드 마이너 , 아담 슈크 한빛미디어 : 북앤몰
[북앤몰] 행복을 담은 선물
smartstore.naver.com
한빛 미디어-하둡 완벽가이드(톰 화이트)
하둡 완벽 가이드 책 톰 화이트 한빛미디어 : 핑거마켓
[핑거마켓] 종합쇼핑몰 :: 핑거마켓
smartstore.naver.com