데이터 엔지니어로서 아마도 하둡에 대해 들어보셨을 것입니다. Hadoop은 대규모 데이터 세트의 분산 처리를 위한 가장 인기 있는 프레임워크 중 하나입니다. 다른 프레임워크보다 비용이 적게 들고 더 안전합니다. 그 중심에는 MapReduce라는 프로그래밍 모델이 있습니다. 오늘은 Hadoop의 내부 작동 원리를 이해하기 위해 MapReduce를 좀 더 자세히 살펴보겠습니다.
이름에서 알 수 있듯이, MapReduce는 두 가지 주요 단계로 나뉩니다: Map과 Reduce. 이 두 단계 외에도 세 가지 중간 단계인 결합(Combine), 분할(Partition), 셔플(shuffle)이 있습니다. 문서의 단어 수 보고서를 작성하는 데이터 처리 작업 예시와 함께 살펴보겠습니다. 간단하게 하기 위해, 소스 문서에는 세 줄씩만 있고, 각 줄에는 세 단어가 있습니다.

분할 분할 단계에서 Hadoop은 입력 데이터를 더 작은 청크로 나눕니다. 이 단계는 데이터를 개별 맵 노드에 분배하여 이후 병렬 처리를 용이하게 하는 것을 목표로 합니다. 예시에서 Hadoop은 소스 문서를 세 개의 청크로 나누며, 각 청크에는 소스 문서의 한 줄씩 포함됩니다.

맵 맵 단계에서 Hadoop은 각 데이터 청크를 처리할 매퍼를 할당합니다. 각 매핑자의 계산 결과는 키-값 쌍의 목록입니다. 예시에서 Hadoop은 총 세 개의 데이터 청크가 있으므로 세 개의 매핑기를 데이터 청크에 할당합니다. 각 매핑자는 세 개의 키-값 쌍을 생성합니다. 각 키-값 쌍의 값은 1이며, 이는 각 단어가 자기 범위 내에서 정확히 한 번씩 나타난다는 것을 나타냅니다.

결합 컴바인 단계는 콤바이너를 사용하는 선택적 단계입니다. 컴바이너는 본질적으로 매퍼에서 개별적으로 실행되는 리듀서입니다. 이 매퍼는 각 매퍼의 데이터를 더 단순화한 형태로 축소하여 후속 단계에서 계산을 용이하게 하며, 보통 동일한 키에 대응하는 값을 결합하여 달성합니다. 우리의 예시가 Hadoop의 컴바인 단계를 포함한다고 가정해 봅시다. 두 번째 매퍼에서는 동일한 키인 "orange"를 가진 두 개의 키-값 쌍이 있습니다. 따라서 이들을 하나로 합치고 값을 더하면 {"orange": 2}가 되어 두 번째 매퍼에서 "orange"라는 단어가 두 번 나타났음을 나타냅니다. 다른 모든 매퍼들은 동일한 키를 가진 키-값 쌍을 포함하지 않습니다. 따라서 이들에 대해 조합이 수행되지 않습니다.

셔플 단계에서 Hadoop은 매퍼가 생성한 키-값 쌍을 해당 리듀서로 보냅니다. 동일한 키를 가진 키-값 쌍은 동일한 리듀서로 전송됩니다. 예시에서 네 개의 서로 다른 키가 있기 때문에 Hadoop은 네 개의 리듀서를 생성합니다. 각 리듀서는 하나의 키를 담당하며, 그 키와 함께 키-값 쌍만 받습니다. 예를 들어, 세 번째 리듀서는 키가 'orange'인 키-값 쌍만 받습니다.

감소 축제 단계에서 각 감축기는 할당된 키-값 쌍을 통합하여 각 키의 최종 출력을 생성합니다. 예시에서 각 감축기는 각 단어의 최종 개수를 계산하기 위해 키-값 쌍을 더해 축소합니다. 예를 들어, 세 번째 감축기는 {"orange": 2}와 {"orange": 1}을 {"orange": 3}로 축소하는데, 이는 "orange"가 문서에 총 세 번 등장했음을 나타냅니다.

감소 단계 후, Hadoop은 모든 리듀서의 출력을 합쳐 최종 결과를 생성합니다. 우리의 경우 최종 결과는 {"Apple": 2, "Banana": 2, "Orange": 3, "Pear": 2}입니다.

간단히 말해, MapReduce는 다섯 가지 주요 단계로 구성됩니다: 분할, 매핑, 결합, 셔플, 그리고 줄이기. 각 단계는 개별적으로는 간단한 작업만 수행하지만, 함께 모여 Hadoop이 대량의 데이터를 효율적으로 처리할 수 있게 합니다. 이 글이 MapReduce의 내부 작동 방식을 더 깊이 이해하는 데 도움이 되었기를 바랍니다.