참고자료 1 : https://swalloow.github.io/map-reduce

참고자료 2 : http://sycros.tistory.com/5





구글 파일 시스템 (GFS, Google File System)



Google File System은 2003년 논문을 통해 소개되었다. 이전에 구글에서 사용하던 파일 시스템은 Big File 이었는데, 구글의 데이터가 급격히 늘어남에 따라 핵심 데이터 스토리지와 구글 검색 엔진을 위해 최적화 된 파일 시스템이 필요하게 된 것 이다.



GFS는 크게 하나의 master node와 여러 개의 slave node로 구성되어 있다. 기능으로 보면 Master, Chunk Server, Client로 이루어져 있다.


Master: GFS 전체를 관리하고 통제하는 중앙 서버의 역할

Chunk Server: 물리적인 서버, 실제 입출력을 처리

Client: 파일 입출력을 요청하는 클라이언트 어플리케이션



수행과정은 다음과 같다. 먼저 Client가 Master에게 파일의 읽기, 쓰기를 요청하게 되면, Master는 Client와 가까운 Chunk Server의 정보를 Client에게 전달한다. Client는 전달받은 Chunk Server와 직접 통신하며 IO 작업을 수행하게 된다.


GFS의 엄청난 강점은 Failuer Tolerance 이다. 다시 말해서, 물리적으로 서버 중 하나가 고장이 나도 정지하지 않고 잘 돌아가도록 설계되었습니다. 예를 들어, Chunk Server 중 하나가 고장이 나면 Master는 고장나지 않은 Chunk Server의 정보를 전달하고 Master Server가 고장이 나면 다른 서버가 Master를 대체하게 된다. 이러한 이유로 Chunk Server는 가격이 저렴한 범용 컴퓨터들로 구성할 수 있게 되었고, 클러스터 환경에서 잘 동작할 수 있게 된다.




맵 리듀스


Map Reduce는 마찬가지로 2004년 구글의 논문(저자: 구글의 전설 제프 딘)을 통해 소개되었다. 논문의 제목은 MapReduce: Simplified Data Processing on Large Clusters 이다. 즉, MapReduce는 말 그대로 대용량 분산 클러스터에서 데이터를 간단히 처리하는 방법입니다.


먼저 Map 함수는 어떤 key-value를 input으로 받아서 각 단어와 관련 발생 횟수를 출력합니다. 그리고 Reduce 함수는 특정 단어에 대해 생성된 모든 카운트를 합산합니다.


Map 함수는 key-vale를 읽어서 필터링하거나 다른 값으로 변환시켜주며, Reduce 함수는 Map을 통해 출력된 리스트에 새로운 key를 기준으로 Groupping하고 이를 Aggregation한 결과를 출력합니다.


MapReduce는 여러 대의 컴퓨터에서 데이터를 처리하는 경우, 병렬처리를 하기 때문에 확장이 쉽습니다. 스케줄러가 데이터를 분산 배치하면 worker에서 작업을 수행하고 각 중간 결과는 로컬 디스크에 저장되며, 나중에 Reduce 연산을 할당받으면 중간 결과를 읽어와서 작업을 수행하고 마찬가지로 파일 시스템에 저장합니다. 위의 그림과 같이 Master 노드에 모든 데이터를 받아서 처리하던 옛날 방식과 통신 처리면에서 확실히 줄어든 것을 알 수 있습니다.


구글은 MapReduce를 URL 접근빈도, Web-Link Graph를 계산하는데 사용하였고, 이를 통해 인덱싱, 정렬 등에서 엄청난 성능향상을 보여주었습니다.





하둡(Hadoop)


Haddop은 2006년 Doug Cutting과 Mike Cafarella가 개발한 분산처리 프레임워크이다. 이들은 구글의 GFS를 대체하기 위해 HDFS  MapReduce 를 구현하였다.

하둡은 분산 파일 시스템인 HDFS(Hadoop Distributed File System) 분산 처리 시스템인 MapReduce로 구성되어 있다. HDFS MapReduce는 둘 다 Master/Slave 구조인데 HDFS에서 Master Name node, Slave Data node라고 부르며 MapReduce에서는 각각 JobTracker TaskTracker라고 부른다.


HDFS에서는 Master Name node가 파일의 메타(meta) 정보를 관리하고 실제 데이터는 여러 대의 Data node에 분산해서 저장한다. 이 때, 데이터는 일정 크기(default 64MB)의 블록단위로 나뉘어 관리되며 이 블록들을 여러 대의 Data node에 분산 및 복제해서 저장한다. 이렇게 하는 이유는 일부 Data node에 장애가 발생하더라도 전체 시스템에서 데이터를 읽고 쓰는데 문제가 없도록 하기 위함이다.


MapReduce는 이렇게 HDFS에 분산 저장된 데이터를 여러 대의 TaskTracker에서 병렬로 처리함으로써 대용량의 데이터를 빠르게 처리하고자 만들어진 시스템이다특히 MapReduce JobTracker에서 TaskTracker의 상태 및 전체 작업의 진행 상황 등을 지속적으로 감시하며 일시적인 장애에 대해서 자동으로 복구하는 기능을 제공하기 때문에 일부 TaskTracker 장비에 문제가 발생하더라도 전체 작업이 진행되는데 문제가 없도록 설계되어 있다. 또한 JobTracker가 여러 대의 TaskTracker에게 자동으로 작업을 할당하고 결과를 통합해 주기 때문에 사용자는 전체 작업 흐름 및 세부 사항에 크게 신경쓰지 않고 데이터 처리 로직에만 집중할 수 있다.



저작자 표시
신고

설정

트랙백

댓글