대용량의 데이터 처리를 위한 분산 처리 프레임워크입니다. MapReduce 프레임워크를 이용하면 대량의 데이터를 병렬로 분석 가능합니다. Map과 Reduce라는 2개의 메소드로 구성되어 있습니다.
HDFS가 파일 저장소를 담당한다면 MapReduce는 연산을 담당합니다. 분산처리의 개념을 간단하게 생각해보면, 1명이 데이터 100개를 처리 vs 100명이 데이터 1개씩 처리를 비교해보면 상식적으로 후자가 더 빠를 것입니다. 하지만 작업을 나누는 시간과 100명이 처리한 결과를 취합하고 정리하는 시간이 필요합니다.
Map 작업에서는 분산되어있는 데이터를 key - value 형태로 묶는 작업을 수행합니다.
Reduce 작업에서는 반환된 key - value 형태의 리스트를 받아 데이터를 합치고 원하는 데이터를 추출하는 작업을 수행합니다.
텍스트 파일에서 단어의 개수를 count하는 문제를 예시로 들어보겠습니다.
즉 MapReduce 작업을 시작할 때와 끝날 때 HDFS로부터 파일을 가져오고( Read ), HDFS에 파일을 쓰는( Write ) 작업을 수행합니다.
MapReduce에서 Job은 사용자가 수행하려는 작업단위로 'Full Program' 즉, 전체 프로그램을 의미합니다. 하둡은 Job을 Map Task와 Reduce Task로 작업을 나눠서 실행합니다.
MapReduce는 JobTracker와 TaskTracker로 구성되며 HDFS와 마찬가지로 master-slaves 구조입니다. Client는 JabTracker에게 Job 실행을 요청하고, 진행상황 및 완료 결과를 공유받게 됩니다.
위 그림을 다시 보겠습니다. 입력 데이터가 들어오면 Input Split 단위로 쪼개게 됩니다. Input Split의 크기는 일반적으로 HDFS의 블록크기와 동일합니다. 이 과정을 Splitting이라고 합니다.
그 다음 Mapping 과정을 거칩니다. 이 때 Input Split의 데이터를 레코드 단위로 한 줄씩 읽어서 사용자가 정의한 Map Function을 적용합니다. 즉, Input Split의 레코드 수 만큼 Map Function이 적용되게 하고 하나의 Input Split에 하나의 Mapper Class가 적용됩니다.
여기까지의 Map Task의 결과로 Intermediate Key-Value Pair가 생성됩니다. 위 그림에서 보면 "Deer, 1"과 같은 Pair가 생성됩니다.
Reduce Task는 이 Pair를 내려받아 Shuffling을 합니다. Shuffle과정은 Map Task의 데이터가 Reduce Task로 전달되는 과정입니다. 이 과정에서 네트워크 통신이 가장 많이 일어나게 되며 MapReduce 성능의 저하가 가장 많이 발생하는 과정입니다.
( 작성 예정 : " MapReduce 실행과정 "/ " 후속포스팅(MapReduce 실습) " )
참고 사이트
https://mangkyu.tistory.com/129
https://velog.io/@spdlqjfire/%ED%95%98%EB%91%A1-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-MapReduce
https://velog.io/@kimdukbae/MapReduce
https://12bme.tistory.com/154