본문 바로가기
콤퓨타/빅데이터입문

빅데이터입문 (3) - MapReduce 23.09.20

by 다_녤 2023. 9. 27.
반응형

Map Reduce라는 개념을 공부했습니다.

 

말그대로 대용량의 데이터에 대한 컴퓨팅을 하는 경우를 생각할 떄 우리는 보통 CPU, Memory, HDD등 하드웨어 리소스를 늘리자는 생각을 시작하는데 사실 한대의 머신으로 대용량 연산은 불가능합니다.

 

이와 관련해서 Google web site를 사례로 다뤘는데 20+ billion pages X 20KB = 400+ TB가량의 웹사이트를 싱글 컴퓨터로 읽기만해도 4개월 이상의 시간이 소요됩니다.

 

그래서 필요한게 바로 클러스터 아키덱터입니다.

클러스터는 각각의 랙 컴퓨터로 이루어져있고 이를 스위치(Switch)가 트리형태로 연결하고 있는 구조입니다.

 

빅데이터 연산에서 고려해야할 문제는 다음과 같습니다.

- 전통적프로그래밍은 직렬적인 점

- 병렬 프로그래밍이 요구된다는 점

- 내 생각보다 쉽지 않을 수 있다는 점

  노드의 failure시 어떻게 대처할 것인지? 해당 노드에서 연산중이던 내용은 어떻게 처리할 것인지?

 

MapReduce의 개념은 여기서 등장합니다.

Google의 제프리 딘에 의해 등장했고, LISP라는 함수형 언어에서 영감을 받았다고 합니다.

언어는 크게 Map 연산과 Reduce 연산 두가지로 이루어져 있으며 Map은 function을 set of values의 value에 각각 적용하는 연산이고, Reduce 연산은 function을 set of values를 iteration하여 순차적으로 적용시키는 연산을 말합니다.

 

map연산은 python 내장함수 map()과 유사합니다.

 

MapReduce는 최근들어 단순한 프로그래밍 컨셉을 넘어서 프레임워크로도 사용됩니다. 프레임워크는 단순히 SW를 넘어 HW와 인프라를 아우르는 전반적인 솔루션과 같은 것을 의미한다고 합니다.

apahe 사의 Hadoop과 Amazon의 Elastic MapReduce라는 프레임워크가 있습니다.

 

프레임워크로써도 마찬가지로 아래의 이슈를 다뤄야 합니다.

Parallelization

Data distribution

Load balancing

Fault tolerance

 

MapReduce연산이 요구되는 대표적인 예제는 WordCount case입니다.

매우 큰 도큐먼트에서 word가 얼마나 반복되었는지를 파악하기 위해서는 segmentation별로 나눠 각 클러스터에서 map 연산을 수행합니다.

각 클러스터에서 map 연산이 수행된 뒤에는 처음부터 끝까지 reduce연산을 통해 (word, count) 쌍으로 데이터 연산을 진행합니다.

 

또다른 예제로는 Host Size 확인입니다. 특정 URL에서 제공하는 web page의 총합은 얼마나 될 지를 계산하는 문제입니다.

이는 link 분석과 그래프연산을 통해 계산이 가능하다고 합니다. 제 개인적인 생각에는 그래프를 bfs 알고리즘으 각 클러스터가 나눠서 연산해나가면 되지 않을까 생각이 듭니다.

 

MapReduce로 검색을 하면 가장 처음 맞는게 프레임워크 제품들의 기술과 설명이라 감이 잘 안잡혔는데 일종의 프로그래밍의 컨셉이고 연산방식들이라고 생각하니까 이해가 쉬웠습니다.

하지만, 아직은 처음접하는 분산컴퓨팅, 병렬 프로그래밍 개념이라 모르는 사람에게도 설명하기 위해서는 조금 더 이해도를 높여야 할 것 같습니다. 특히, 클러스터 아키텍처같은 경우에는 더 스터디해봄직하네요... 개념이 재밌어요..

 

반응형