728x90
하둡에 내재된 기능으로 JAVA로 구현되어있으며, 빅 데이터를 효율적으로 처리한다. 이러한 MapReduce를 간단히만 살펴보자.
하는 일
간단히 얘기하면 데이터를 Mapping하고, 데이터를 Reduce한다.
당연하게도 Mapping은 Mapper가 하게 되고, Reduce는 Reducer가 하게 된다.
- Mapper: 입력 데이터를 특정 로직에 따라서 변형을 가하여 구조화 출력한다.
- Reducer: 데이터를 집계하는 역할을 한다.
즉, Mapper는 데이터를 변환하고, Reducer는 데이터를 집계하며, 그 결과 데이터는 Key - Value 형태로 나온다. Key는 집계하고자 하는 항목이며, Value는 그 값이다.
과정
MapReduce의 전체적인 과정은 위와 같다.
- 입력 데이터가 Mapper에 들어온다. 이를 여러개의 파티션으로 나눈다. (Split)
- Mapper의 출력으로Key: Value 형태로 구조화되어 나온다. 이때 Key는 집계하고자 하는 항목이며, Value는 그 값이다. 이때 Key는 중복된 값을 가지고 나올 수 있다. (이외의 정보는 제거되어 필요한 정보만이 나온다.)
- Mapper의 출력을 Shuffle & Sort를 사용해 정리한다. 이때 같은 Key 값을 가진 데이터는 하나의 key로 합쳐지고, key 값으로 정렬된다.
예를 들어 Mapper의 출력이 다음과 같다고 하자. {166: 359 185: 213 1: 12 166: 12 185: 33}
Shuffle & Sort를 거치고 나면 다음과 같다. {1: [12] 166: [359, 12] 185: [213, 33]} - Reducer는 정렬된 결과를 받고, 집계 함수로 처리한다.
위 예시에서 Count 집계 함수 처리를 한다면, 다음과 같다.
{1: 1 166: 2 185: 2}
Map Reduce 이렇게 간단한 Mapper와 Reducer로 구성되었으며, 이를 활용해 무궁무진하게 확장 가능하다.
MapReduce의 분산 처리 방법
MapReduce를 좀 더 자세히 살펴보기 위해 MapReduce의 분산 처리 방법에 대해서 알아보자.
- 입력으로 들어온 데이터를 특정 크기의 줄로 나누어 파티션을 생성한다.
- 각 파티션을 여러 노드에 분배한다. 이때 각 노드는 독립된 PC이다.
- 각 노드는 각 입력을 Mapping한다. 이때 작업은 다른 Line의 영향을 받지 않는 작업이기에 분산 처리가 충분히 가능하다.
- 각 노드에서 나온 결과를 모아서 Shuffle & Sort로 정렬 및 처리해 키로 정렬하고 같은 키인 값들을 모아준다. (정렬시 Merge Sort를 사용함)
- 이 결과를 다시 여러 파티션으로 나누어 여러 노드에 분배한다.
- 각 노드는 Reducing 작업을 진행한다.
주의 사항
- MapReduce는 매우 복잡한 데이터 처리 로직에 대해서는 비효율적이다. line 별로 처리를 하는 방식에 매우 효과가 있지 다른 line에 영향을 받는 처리는 상당히 MapReduce로는 어려울 수 있다.
- MapReduce는 배치 처리에 최적화 되어 지연시간이 발생해, 실시간 데이터 처리에는 적합한 방식이 아니다. 대신 카프와 같이 메시지 큐 방식을 사용해 모았다가 처리할 수 있긴 하다.
Map Reduce라는 기술이 생각보다 간단해서 언젠가 들은 “위대한 것들은 보통 간단하며 엄청나게 확장 가능한 것이다”라는 말이 생각나는 밤이다.
Reference
728x90
'공부 및 정리 > 데이터 엔지니어링' 카테고리의 다른 글
[Airflow] 비트코인 일일 분 봉 데이터 파이프라인 프로젝트 (작업편) (1) | 2024.03.06 |
---|---|
[Airflow] 비트코인 일일 분 봉 데이터 파이프라인 프로젝트 (환경 설정편) (1) | 2024.03.06 |
RDD (Resilient Distributed Dataset) (0) | 2024.03.06 |
[Airflow] DAG (0) | 2024.03.04 |
[Airflow] 개요 및 설치 방법 (0) | 2024.03.04 |