brunch

You can make anything
by writing

C.S.Lewis

by 채규병 Oct 03. 2018

[번역] 맵리듀스(MapReduce) - 1

데이터 과학자를 꿈꾸며

2004년 구글에서 발표한 논문입니다. 

번역에 부족한 점이 많습니다. 

댓글로 말씀해주세요!


MapReduce

: Simplified Data Processing on Large Clusters


Jeffrey Dean and Sanjay Ghemawat

jeff@google.com

sanjay@google.com


Google, Inc.

번역: 채규병



맵리듀스: 

거대한 묶음(클러스터)에 대한 단순화된 데이터 접근법


개요


 맵리듀스는 커다란 데이터 집합(data sets)을 가공(processing)하고 생산(generating)하기 위한 프로그래밍 모형이자 이에 연관된 구현(implementation)이다. 사용자들은 매개  키/값 쌍의 집합을 생산하기 위해 한 쌍씩 키/값을 가공하는 (map) 함수를 작성한다. 그리고 리듀스(reduce) 함수는 매개 키와 연관된 모든 값들을 합치는 역할은 한다. 실제로 이 세계의 수많은 사건들은 이러한 맵과 리듀스 모델로 표현이 가능하다.


 이런 유형의 기능을 하는 프로그램들은 자동적으로 병렬화되어 기계들의 큰 묶음 위에서 실행된다. 여기서 런타임 시스템은 여러 디테일을 담당한다. 입력 데이터(the input data)를 구분하고, 기계 집합 사이에서 프로그램의 실행 스케쥴링을 하고, 기계 실패(machine failures)를 다루며, 요구되는 기계 간의 통신을 처리한다. 맵리듀스는 이러한 특징을 가진 덕분에 거대한 분산 시스템의 리소스를 병렬-분산 시스템에 대한 경험이 없는 프로그래머가 보다 쉽게 활용하게 해준다.


 맵리듀스 구현은 큰 단위의 기계 묶음에서 실행되며 매우 규모 가변적(scalable)이다: 대표적인 맵리듀스 계산(computation)은 몇 천개의 기계에서 나오는 테라바이트 급의 수많은 데이터를 처리한다. 프로그래머는 쉽게 사용할 수 있는 시스템을 찾는다: 맵리듀스 프로그램은 몇 백개가 구현되어 있고, 매일 천 개 이상의 맵리듀스 작업이 구글의 기계 묶음들에서 실행되고 있다.




1. 서론


 지난 5년 동안, 두 필자와 많은 다른 구글 관계자들은 다양한 종류의 데이터들을 계산하기 위해 수 백 가지의 계산 방법(computations)을 구현해왔다. 이러한 방법들은 크롤링된 문서, 웹 요청 로그 등 수많은 raw data를 처리한다. 예를 들어, 변환된(inverted) 인덱스, 다양한 그래프 구조를 가지는 웹 문서 표현, 크롤링된 페이지의 호스트 별 개수에 대한 요약, 특정 기간동안 가장 빈도 높은 질의어(queries) 집합 등 다양하다. 이에 대한 데이터 처리 방법은 개념적으로 단순하다. 하지만, 큰 용량의 입력 데이터를 합리적인 시간 안에 작업을 끝내려면 반드시 데이터를 수백 혹은 수천 개의 기계들로 분산해야 한다. 그렇기에 어떻게 계산들을 병렬화할지, 어떻게 데이터를 분산할지, 그리고 어떻게 작업 실패를 다룰지에 대한 이슈가 생긴다. 이는 복잡하고 많은 양의 코드를 요구하기 때문에 단순한 개념의 데이터 처리 방법을 어렵게 만든다.


 우리는 이러한 복잡성에 대응하기 위해 새로운 개념을 디자인했다. 이 개념은 병렬화, 결함 내성(fault-tolerance), 데이터 분산화 그리고 라이브러리에서 밸런싱을 불러오는 지저분한 계산 방법을 단순하게 해주었다. 우리의 개념은 리스프(Lisp)에서 표현되어 있고 많은 다른 기능적 언어들의 근원인 맵과 리듀스에서 영감을 얻었다. 우리의 방법 중 많은 부분은 입력 데이터의 각 논리적 "레코드" 별 맵 연산(중간키/값 쌍의 집합을 산출)과 산출된 데이터의 리듀스 연산(같은 키의 값끼리 연결)과 연관된다. 이처럼 우리의 기능적 모델은 사용자 특화된 맵과 리듀스 연산을 가졌기 때문에 손쉽게 수많은 계산을 병렬화하고, 본래의 메카니즘을 결함에 강하게 하여 재실행(re-execution)을 가능하게 한다.


 특히 이 작업에서 주로 공들인 부분은 단순하고 파워풀한 인터페이스이다. 이 인터페이스는 커다란 상업적 PC들의 묶음에서 높은 퍼포먼스를 가지면서도, 자동적인 병렬화와 큰 단위의 계산의 분산화를 가능하게 해준다. 


 <2> 에서는 기본적인 프로그래밍 모형을 설명하고 몇 가지 예시를 들겠다. <3> 에서는 우리의 클러스터를 기본으로 하는 컴퓨팅 환경에서 짜여진 맵리듀스 인터페이스에 대해서 설명하겠다. <4> 에서는 우리가 유용하다고 발견한 프로그래밍 모형에 대한 몇 가지 고안에 대해서 설명하겠다. <5> 는 다양한 작업을 위해 구현한 것에 대한 퍼포먼스를 측정한 결과를 담고 있다. <6> 에서는 구글 내에서 사용하고 있는 맵리듀스의 사용에 대해서 논의하겠다. 생산 인덱싱 시스템의 재작성을 위한 기본으로서, 이에 대해 우리가 사용해본 경험에 대해서도 포함해서 말이다. <7> 에서는 맵리듀스 관련된 앞으로의 작업에 대해서 논의하겠다.




브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari