-리듀스(Map-Reduce)는 구글이 분산 컴퓨팅을 지원하기 위한 목적으로 제작하여, 2004년 발표한 소프트웨어 프레임워크입니다이 프레임워크는 대용량 데이터를 신뢰할 수 없는 컴퓨터로 구성된 분산 클러스터 환경에서 대규모 데이터를 병렬로 처리하기 위해 개발되었습니다.

 

-리듀스의 혁신적인 부분은 데이터 집합에 대한 쿼리를 입력 받아분할 한 후여러개의 노드에서 병렬로 처리하는데 있습니다이러한 분산 처리는 단일 장비에서 처리하기에는 부적합한 대규모 데이터 처리 문제를 해결합니다.

 

 

분산 환경에서의 Map-Reduce 실행 ]

 

위의 그림은 네임노드(NameNode)의 잡트랙커(JobTracker)가 데이터노드(DataNode)의 테스크트랙커(TaskTracker)에게 일을 분배해 주는 개념도입니다데이터노드는 컴퓨터 한대라고 생각하시면 되며-리듀스 함수들은 컴퓨터 마다 상주하여 병렬로 작업을 수행함으로써 대규모 데이터를 짧은 시간안에 처리할 수 있습니다.

 

 

-리듀스(Map-Reduce)의 개념

-리듀스는 맵 단계와 리듀스 단계로 처리 과정을 나누어 작업합니다(map)은 흩어져 있는 데이터를 관련 있는 데이터끼리 묶는 작업을 통해서 임시 데이터 집합으로 변형되며리듀스(Reduce)는 맵 작업에서 생성된 임시 데이터 집합에서 중복 데이터를 제거하고 원하는 데이터를 추출하는 작업을 진행합니다.

 

[ Map-Reduce 작업 ]

 

 

-리듀스 처리 순서

맵리듀스가 분산병렬 처리하기 좋은 이유는 입력 데이터에 대한 맵 함수는 동시에 독립적으로 병렬 처리할 수 있는 구조이기 때문입니다아래 그림을 통해서 맵-리듀스에서 파일안에 있는 단어들의 합을 구하는 단순한 작업에 대해서 간략하게 알아보겠습니다.

 

-리듀스 처리 방법 ]

 

처음 작업은 입력 데이터를 라인 단위로 분할(Splitting) 합니다분할된 라인 단위의 문장을 (map) 함수로 전달하면맵 함수는 공백을 기준으로 문자를 분리 한 후에 단어의 개수를 계산합니다메모리에 저장되어 있는 맵 함수의 출력 데이터를 파티셔닝과 정렬을 해서 로컬 디스크에 저장한 후에 네트워크를 통해서 리듀서에게 전달하는 셔플링(Shuffling) 작업을 진행합니다리듀스(reduce) 함수는 단어 목록들을 반복 수행하면서 합을 계산하여 클라이언트에게 결과 파일을 제공합니다.

 

 

Data Processing: Map

파일을 작은 블록으로 나눈 후에 클러스터를 통해서 확산을 시키면 매우 빠르고 효율적인 병렬처리를 제공할 수 있습니다하둡에서 핵심 서비스에 해당하는 병렬 처리 프레임워크(Parallel Processing Framework)는 맵-리듀스(Map-Reduce)에서 담당을 합니다-리듀스의 이름도 맵 작업과 리듀스 작업의 이름을 따서 만들어졌습니다.

 

첫번째 순서인 맵 처리(Map Process)는 로컬 블록의 데이터에서 계산을 수행하기 위해서 동시에 데이터 노드에게 작업을 요청합니다여기서는 File.txt 안에 존재하는 ‘Refund’ 단어의 출현 빈도수를 계산하기 위해서 데이터 노드에게 요청을 합니다이 작업을 시작하기 위해서 먼저 클라이언트(Client)는 “File.txt 안에 ‘Refund’ 단어가 몇번 나오는지” 에 대한  -리듀스 작업을 잡 트랙커(Job Tracker)에게 요청합니다.

 

잡 트랙커(Job Tracker) File.txt의 해당 블록을 가진 데이터 노드(Data Node)들의 위치를 알기 위해서 네임 노드(Name Node)에게 물어봅니다잡 트랙커는 File.txt와 연관된 데이터 노드들에게 ‘Refund’의 출현 빈도수를 알아내기 위해서 데이터 노드(Data Node)에서 동작중인 태스크 트랙커 (Task Tracker)에게 작업을 지시합니다.

 

태스크 트랙커(Task Tracker)는 ‘Refund’의 출현 빈도수를 알아내기 위해서 맵 작업을 시작하고작업의 진행 상황을 모니터링합니다또한 태스크 트랙커는 ‘heartbeats’와 작업의 상태를 잡 트랙커에게 제공합니다맵 작업이 완료가 되면 각 노드들은 임시 로컬 저장소(Temporary local storage)에 계산 결과를 저장하며저장되는 데이터를 중간 데이터(Intermediate data) 라고 부릅니다.

 

다음 단계는 데이터 노드에서 생성된 중간 데이터 파일들을 네트워크를 통하여 리듀스 작업(Reduce task)을 하기 위해서 작업을 담당하는 데이터 노드에게 중간 데이터 파일들을 전송합니다.

 

 


[ Map Task ]

 

 

What if data isn’t local?

잡 트랙커는 항상 맵 작업을 위해서 데이터 노드들을 선택하여 작업을 해야 하지만그렇지 못한 경우가 발생을 합니다그 이유중 하나로는 데이터 노드들이 로컬 데이터를 사용하여 이미 다른 작업을 진행중이어서 더 이상 작업을 진행할 수 없는 경우입니다이러한 경우가 발생을 하면 잡 트랙커는 동일한 랙(rack)에 있는 다른 데이터 노드을 선택하기 위해서 네임 노드에 있는 랙 인식(rack awareness) 정보를 참조합니다.

 

잡 트랙커는 동일한 랙에 있는 데이터 노드에게 작업을 할당하고자신에게 없는 데이터 블록을 가져오기 위해서 네임 노드을 통하여 해당 데이터 노드로부터 데이터 블록을 가져옵니다.

 

 

[ What if Map Task data isn’t local? ]

 

 

Data Processing: Reduce

-리듀스 프레임워크의 두번째 단계는 리듀스(reduce) 작업입니다맵 작업(map task)은 중간 데이터(intermediage data)들을 생성하여 각자의 데이터 노드에 저장하는 단계입니다이제 우리는 최종 결과를 얻기 위해서 분산되어 저장되어 있던 중간 데이터들을 정제하고 결합하기 위해서 데이터들을 한곳으로 모아야 합니다.

 

잡 트랙커는 클러스터에 있는 하나의 노드에서 리듀스 작업(reduce task)를 시작하고리듀스 작업(reduce task)은 맵 작업(map task)에서 완료된 중간 데이터들을 수집합니다여러 곳에서 분산되어 실행되던 맵 작업의 중간 데이터들은 각자의 데이터 노드의 번호로 구분되어 TCP를 통하여 거의 동시에 리듀서(reducer)에게 응답을 합니다리듀스 작업은 중간 데이터를 수집하고 최종 계산 작업을 진행할 수 있습니다.

 

이 예제의 경우에는 “Refund” 단어의 출현 빈도수를 합산하여 결과를 ‘Results.txt’ 파일에 저장합니다작업이 완료되면 클라이언트는 하둡 분산 파일 시스템(HDFS)에 저장되어 있는 ‘Results.txt’을 읽을 수 있습니다.

 

 

[ Reduce Task computes data received from Map Tasks ]

 

 

-리듀스의 문제점

최근까지 하둡은 하둡 분산 파일 시스템(HDFS)의 대규모 데이터를 처리하는 계층으로 맵-리듀스를 선택했습니다하지만 최근 소개된 차세대 하둡으로 알려진 얀(YARN, Yet Another Resource Negotiator)은 하둡 환경의 맵-리듀스에 대한 의존성을 제거하였습니다.

 

이러한 변화에는 맵-리듀스가 가지고 있는 확장성 문제와 처리 속도가 느리다는 제약사항 때문입니다-리듀스의 이러한 한계로 인하여 많은 개발업체들이 속도 향상를 위하여 다른 방법을 생각하도록 유도하였습니다. ( 예를 들면 IBM의 어댑티브 맵-리듀스(Adaptive Map-Reduce)을 들수 있다.)

 

하둡 2.0 스택 ]

 

위의 그림을 보시면 하둡 2.0에서는 클러스터 리소스 관리(Cluster Resoruce Management)를 맵-리듀스 대신에 얀(YARN)이 담당하고 있습니다얀은 기존의 맵-리듀스 API와의 호환성을 유지하면서도 타 회사에서 개발된 다양한 도구에서도 실행될 수 있도록 확장성을 부여하였습니다이를 통해서 속도가 느린 맵-리듀스의 단점을 해결할 수 있는 기반을 마련한 것입니다.

+ Recent posts