2020. 6. 29. 16:22

함수형 언어 맵리듀스(MapReduce)

스마트폰, SNS, 사물인터넷 확산 등으로 엄청난 양의 데이터가 생산, 유통, 가공, 공유되는 빅데이터 시대에 진입하면서 다양한 속성들을 가진 데이터를 처리하기 위한 새로운 방법이 요구됨에 따라 등장하였으며 Map과 Reduce라는 함수를 기반으로 구현된다.

바야흐로 모든 기기가 인터넷에 연결되는 사물인터넷 시대가 도래했다. 이제는 흔해진 대용량 데이터로 인해 전통적인 DBMS에서 저장하고 처리하기에는 한계가 따를 수 있다. 이런 상황에서 분산 저장 시스템은 저장공간을 효율적으로 확장하는데 역점을 두고 있으며 정보를 빠르게 처리하는 분산 처리와 함께 분산 환경은 시스템의 성능과 저장 측면에서 발달해왔다.

하둡(Hadoop) 1.x 버전의 대표적인 2가지 기술들로 데이터 저장을 위한 HDFS와 처리를 위한 맵리듀스가 있다. 2.x 버전부터는 자원관리의 핵심인 YARN과 함께 수많은 컴포넌트들이 계속 추가되면서 발전하고 있다.

`맵리듀스`는 2004년 구글에서 발표한 대용량 데이터 분산처리를 위한 프레임워크로 테라바이트 또는 페타바이트 이상의 데이터를 저렴한 x86 서버를 클러스터링하여 분산방식으로 처리한다. 데이터 처리 기본 단위는 매퍼(Mapper)와 리듀스(Reduce)이다. 핵심은 입력과 출력이 Key와 Value로 구성된다.

맵(Map)은 산재되어 있는 데이터를 키와 값 형태로 연관성 있게 묶는 작업을 하고, 리듀스는 맵 작업 결과에서 중복 데이터를 제거한 후 원하는 결과를 추출하는 작업을 수행한다. 이를 좀 더 자세히 설명하자면,

1단계 - 혼재된 각종 데이터 세트를 각각 Key와 Value 쌍으로 묶어서 Map 함수의 입력 값으로 보낸다. 전송된 데이터 세트를 Map을 통해 필요한 분석 대상만을 각각 추출한 후 필요없거나 잘못된 레코드를 제거한다.

2단계 - 1단계 작업이 완료되면, 분석 대상 값만을 추출하여 데이터를 Key-Value 형태로 정렬해 Reduce 함수의 입력값으로 넘겨준다.

3단계 - 전달한 입력값을 분석해 원하는 값을 구하는데 여기서 리듀스를 통해 중복된 값들을 제거하고 원하는 결과만 추출하는 작업을 진행한다.

맵리듀스의 특징으로는 데이터가 있는 서버로 코드를 전송하고 Key와 Value 형태로 데이터 세트를 변환해 처리하면서 데이터를 서로 공유하지 않는 Sharing Nothing 아키텍처로 자신의 데이터만 처리해 디스크에 저장하므로 매우 간단한 시스템을 구현했지만 프로그램 제작과 실행에 시간이 많이 걸리는 단점이 있다. 그래서 실시간보다 오프라인 배치처리 작업에 적합하다.

데이터를 다루는 전통적인 방법은 개발환경으로 데이터를 가져와 프로그래밍하는 것이지만 이 방법은 방대한 데이터 또는 산재한 데이터를 처리하기에는 매우 어렵고 까다롭다. 반면에 데이터가 있는 곳으로 코드를 전달, 운용하는 것이 더 효율적이다. 나아가 산재된 현장의 데이터라도 여러 개로 분할, 복재되어 있는 경우, 해당 위치까지 처리 코드를 전달할 수 있다면 훨씬 유용하다.

데이터는 HDFS 환경에 따라 블록 단위로 쪼개져 분산, 복제, 저장된다. 이때 각 블록을 읽어서 데이터를 처리하는데, 이것을 맵 태스크라고 한다. 이렇게 나온 출력 결과를 최종 처리하는 과정을 리듀스 태스크라고 한다. 즉 맵 태스크는 기준이 되는 키를 중심으로 데이터를 읽고, 키-밸류 형태로 만들어 주고, 리듀스 태스크는 이 키를 중심으로 결과를 집계한다.