IT 삽질기

Hadoop MapReduce 기본 동작방식 본문

BigData/Hadoop

Hadoop MapReduce 기본 동작방식

화이팅빌런 2021. 5. 20. 23:58

Hadoop에서 MapReduce의 동작방식에 대해서 알아보도록 하자.

먼저 MapReduce에 대해 간단히 알아보도록 하자

 

MapReduce

- 대용량의 데이터 처리를 위한 분산 프로그래밍 모델

- 분산 컴퓨팅 환경에서 데이터를 병렬로 분석할 수 있음

- Map / Reduce라는 2개의 taks로 구성

- Map는 분산된 데이터를 연관성 있는 데이터들로 분류하거나 연산을 하는 작업으로 (Key, Value) 쌍을 가짐

- Reduce는 Map에서 나온 결과 데이터에서 중복 데이터를 제거하고 원하는 데이터를 추출하는 작업 Map의 output가 Reduce의 input이 된다.

 

 

Hadoop 분산 시스템에서 이런 MapReduce작업이 어떻게 이루어지는 알아보도록 하자.

먼저 Map의 input값에 대해 알아보자.

Map의 input을 입력 스플릿 혹은 스플릿이라고 하는데, 이는 각 map task에 동일한 크기로 분리되어 사용된다. 일반적으로는 이 크기를 Hadoop의 block와 같은 크기로 사용하는 것을 권장하는데, 그 이유에 대해 알아보자.

 

Hadoop에서 중요한 것 중 하나는 데이터 지역성이다.

데이터 지역성이란 map task와 같이 데이터 처리를 위한 task를 실행할 때, 사용할 데이터가 같은 노드에 있는 것을 말한다. 이를 통해 hadoop에서는 데이터를 네트워크를 통해 전달하지 않게 되고, 결국 성능 향상으로 이어지게 된다.

map의 입력 스플릿 크기를 Hadoop의 block 크기와 같게 사용하는 것도 이와 관련이 있는데 대규모의 시스템에서 하나 이상의 block가 하나의 노드에 존재하는 것을 보장할 수 없어 하나의 block만 가지고 map task를 실행하기 적합하기에 block과 동일한 크기로 사용하는 것이 일반적이다.

 

이와 별개로 map task의 스플릿의 크기가 작을 경우 node별 부하가 분산된다는 장점이 있지만, 너무 작게 설정되어 있을 경우 map task에서 너무 많은 task를 생성하게 되어 실행시간이 증가할 수도 있으니 주의해야 한다.

 

이렇게 map task가 이루어진 데이터는 어떻게 될까?

reduce가 필요없는 작업의 경우 곧바로 작업이 마무리 되며 

앞서 map task의 결과가 reduce task의 input이 된다고 했는데, memory나 HDFS를 통해 reducer로 전달되는 것이 아닌 로컬 디스크에 저장된다. HDFS에 저장되는 경우 복제 작업이 추가될 수도 있으며, 불필요한 자원낭비가 발생한다.

reduce 작업이 필요한 경우 reducer의 수를 지정하여 작업할 수 있는데 규모가 큰 작업이여도 reducer을 하나만 두고 사용하는 것도 가능하고 작은 작업에 대해 reducer을 다수 놓은 것도 가능하기 때문에 reducer에 대한 적절한 튜닝이 필요하다.

이렇게 reduce작업까지 완료된 데이터는 이후 map의 결과물은 reduce에서 사용한 이후에 삭제되며, reduce의 결과물은 HDFS상에 저장되며 mapreduce작업이 마무리된다.

Comments