맵리듀스
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
맵리듀스는 함수형 프로그래밍의 map과 reduce 함수에서 유래한 대규모 데이터 처리를 위한 프로그래밍 모델이다. 구글의 제프 딘과 산제이 게마와트가 2004년에 발표했으며, 맵(Map) 단계, 셔플(Shuffle) 단계, 리듀스(Reduce) 단계로 구성된다. 맵리듀스는 병렬 처리를 통해 페타바이트급 데이터 정렬도 가능하게 하며, 하둡과 같은 오픈 소스 프로젝트를 통해 널리 사용되었다. 맵리듀스는 분산 검색, 웹 로그 분석, 머신 러닝 등 다양한 분야에 활용되며, 대한민국에서도 포털, 통신사, 금융, 전자상거래 등에서 빅데이터 처리를 위해 사용된다. 맵리듀스는 단순한 구조와 병렬 처리의 장점을 가지지만, 셔플 단계의 고려, 통신 비용, 반복적인 쿼리의 어려움, 비순환 데이터 흐름 등의 한계도 존재한다.
더 읽어볼만한 페이지
- 분산 컴퓨팅 구조 - 슈퍼컴퓨터
슈퍼컴퓨터는 일반 컴퓨터보다 훨씬 높은 성능을 가진 컴퓨터로, 복잡한 계산과 시뮬레이션을 수행하며, 프로세서, 메모리, 스토리지, 네트워크 등으로 구성되어 병렬 처리를 통해 높은 성능을 구현하고, 군사, 기상 예측, 과학 기술 분야, 인공지능 등 다양한 분야에서 활용되고 있다. - 분산 컴퓨팅 구조 - 자율 컴퓨팅
자율 컴퓨팅은 시스템 스스로를 관리하는 것을 목표로 IBM에서 제창되었으며, 자기 구성, 자기 복구, 자기 최적화, 자기 방어의 4가지 요소를 특징으로 하고, 복잡한 현대 분산 컴퓨팅 시스템의 문제점을 해결하기 위해 필요하다. - 하둡 - 아파치 하둡
아파치 하둡은 대용량 데이터를 분산 처리하기 위한 자바 기반의 오픈 소스 프레임워크로, HDFS, 맵리듀스, YARN 등의 모듈로 구성되어 클라우드 환경에서도 사용된다. - 하둡 - 아파치 스파크
아파치 스파크는 대규모 데이터 처리를 위한 오픈 소스 분산 처리 시스템으로, 빠른 속도와 다양한 API 지원을 통해 빅데이터 분석, 머신 러닝, 스트리밍 처리 등 여러 분야에서 활용되며 아파치 소프트웨어 재단의 핵심 프로젝트 중 하나이다. - 병렬 컴퓨팅 - 슈퍼컴퓨터
슈퍼컴퓨터는 일반 컴퓨터보다 훨씬 높은 성능을 가진 컴퓨터로, 복잡한 계산과 시뮬레이션을 수행하며, 프로세서, 메모리, 스토리지, 네트워크 등으로 구성되어 병렬 처리를 통해 높은 성능을 구현하고, 군사, 기상 예측, 과학 기술 분야, 인공지능 등 다양한 분야에서 활용되고 있다. - 병렬 컴퓨팅 - 컴퓨터 클러스터
컴퓨터 클러스터는 여러 대의 상용 컴퓨터를 고속 네트워크로 연결하여 고성능 컴퓨팅 시스템을 구축하는 방식으로, 슈퍼컴퓨터를 포함한 다양한 분야에서 높은 가용성과 확장성을 제공하며, 클러스터 미들웨어를 통해 시스템 관리, 부하 분산, 통신 방식, 데이터 공유 등을 지원하고 노드 장애 관리를 위한 펜싱 기술을 활용한다.
맵리듀스 | |
---|---|
개요 | |
![]() | |
유형 | 병렬 프로그래밍 모델 |
개발자 | 구글 |
발표 시기 | 2004년 |
사용 언어 | 자바, C++, 파이썬 |
상세 정보 | |
목적 | 대규모 데이터 처리 |
핵심 기능 | 분할 정복 병렬 처리 오류 허용 |
작동 방식 | "Map" 단계: 데이터를 분할하고 변환함. "Reduce" 단계: 변환된 데이터를 집계하고 요약함. |
장점 | 대규모 데이터 처리에 적합함. 병렬 처리로 빠른 속도 제공함. 비교적 단순한 프로그래밍 모델임. |
단점 | 복잡한 알고리즘 구현에 어려움이 있을 수 있음. 실시간 데이터 처리에는 부적합함. |
활용 분야 | 검색 엔진 데이터 마이닝 기계 학습 로그 분석 |
구현체 | |
오픈 소스 구현체 | 아파치 하둡 |
기타 구현체 | MongoDB CouchDB Apache Spark |
관련 기술 | |
프로그래밍 모델 | MPI AllReduce |
데이터 처리 | 스플릿-어플라이-컴바인 전략 |
참고 자료 | |
참고 문헌 | MapReduce: Simplified Data Processing on Large Clusters (구글 연구 자료) |
관련 링크 | 아파치 하둡 맵리듀스 튜토리얼 |
2. 역사
맵리듀스는 함수형 프로그래밍 언어인 리스프(Lisp)의 map과 reduce 함수에서 유래한 개념이다. 2004년, 구글의 제프 딘(Jeff Dean)과 산제이 게마와트(Sanjay Ghemawat)는 맵리듀스 논문을 발표하여 대규모 데이터 처리를 위한 새로운 패러다임을 제시했다. 구글은 맵리듀스를 사용하여 검색 엔진 인덱싱, 웹 문서 분석, 기계 학습 등 다양한 작업을 수행했다.
맵리듀스는 크게 맵(Map) 단계, 셔플(Shuffle) 단계, 리듀스(Reduce) 단계로 구성된다.
2006년, 더그 커팅(Doug Cutting)은 구글의 맵리듀스 및 구글 파일 시스템(GFS) 논문을 기반으로 오픈 소스 프로젝트인 하둡(Hadoop)을 개발했다. 하둡은 맵리듀스 모델을 널리 보급하고, 빅데이터 처리의 핵심 기술로 자리매김하는 데 크게 기여했다.
대한민국에서는 2010년대 초반부터 빅데이터 기술이 주목받으면서 맵리듀스와 하둡이 함께 도입되어 활용되기 시작했다.
3. 작동 원리
'''Map 단계''' - 마스터 노드는 입력 데이터를 받아 더 작은 단위로 분할하고 여러 워커 노드에 배치한다. 받은 워커 노드가 더 작은 단위로 분할하여 다른 여러 워커 노드에 배치하는 더 깊은 계층 구조의 분할을 수행하기도 한다. 그리고 각 워커 노드는 해당 작은 단위의 데이터를 처리하고 처리 결과를 마스터 노드로 반환한다.
'''Reduce 단계''' - 이어서 마스터 노드가 Map 단계의 처리 결과를 집계하고, 목표로 했던 문제에 대한 답(결과)을 어떤 방법으로 출력한다.
MapReduce의 특징은 Map과 Reduce의 각 단계에서 병렬 처리가 가능하다는 것이다. 각 Map 처리는 다른 Map 처리와 완전히 독립적이며, 이론적으로 모두 병렬로 실행할 수 있다(실제로는 데이터 소스나 CPU 수에 따라 제한이 걸린다). 이어지는 Reduce 단계에서는 Map 단계의 처리 결과가 키별로 정리되어 Reduce 처리에 전송되는데, 이 역시 병렬 처리가 가능하다.
MapReduce에 의한 일련의 처리는 순차 실행 알고리즘과 비교하여 종종 비효율적으로 보이지만, MapReduce는 일반적인 범용 서버가 처리할 수 있는 데이터량을 훨씬 초과하는 큰 데이터 세트에도 적용할 수 있다. 다수의 서버를 가지고 있다면 MapReduce를 사용하여 페타바이트급 데이터의 정렬을 불과 몇 시간 안에 수행하는 것도 가능하다.
또한, 처리가 병렬적이므로, 여러 서버나 스토리지의 일부에 장애가 발생하여 Map 처리나 Reduce 처리를 실행할 수 없는 노드가 발생하더라도, 입력 데이터를 사용할 수 있는 경우, 처리를 재 스케줄하여 실행할 수 있다. 이를 통해, 장애에 대해 종종 처리 진행 중의 복구가 가능해진다.
3. 1. 맵 (Map) 단계
맵(Map) 단계에서는 입력 데이터를 (키, 값) 쌍의 형태로 변환한다.[59] 각 (키, 값) 쌍에 대해 맵 함수를 적용하여 중간 결과인 (키, 값) 쌍들을 생성한다.[59] 맵 함수는 각 입력 데이터에 독립적으로 적용되므로 병렬 처리가 가능하다.
문서에서 단어 수를 세는 경우, 맵 함수는 각 단어를 키로, 1을 값으로 하는 (키, 값) 쌍을 생성한다.[59] 예를 들어, "한국어"라는 단어가 입력되면 ("한국어", 1)과 같은 형태의 중간 결과가 생성된다.
맵 함수의 입력 및 출력 유형은 서로 다를 수 있다. 만약 응용 프로그램이 단어 수를 세는 작업을 수행한다면, 맵 함수는 해당 줄을 단어로 나누고 각 단어에 대한 키/값 쌍을 출력한다. 각 출력 쌍은 단어를 키로 사용한다.[59]
한국어 처리의 경우, 한국어 형태소 분석기를 사용하여 문서를 단어 단위로 분리하고, 불용어를 제거하여 맵 함수의 입력 데이터를 생성할 수 있다.
3. 2. 셔플 (Shuffle) 단계
3. 3. 리듀스 (Reduce) 단계
셔플 단계에서 그룹화된 (키, 값) 쌍들에 대해 리듀스 함수를 적용한다.[59] 리듀스 함수는 동일한 키를 가진 값들을 병합하여 최종 결과를 생성한다. 리듀스 함수도 각 키에 독립적으로 적용되므로 병렬 처리가 가능하다.[59]
문서들의 각 단어를 세는 예시에서, 리듀스 함수는 입력 값들을 받아 합산하고, 단어와 최종 합계로 이루어진 단일 출력을 생성한다.[59]
```wikitext
'''function''' reduce(String word, Iterator partialCounts):
''// word: a word''
''// partialCounts: a list of aggregated partial counts''
sum = 0
'''for each''' pc '''in''' partialCounts:
sum += pc
emit (word, sum)
```
프레임워크는 정렬된 순서대로 각 고유 키에 대해 애플리케이션의 ''Reduce'' 함수를 한 번 호출한다. ''Reduce''는 해당 키와 관련된 값들을 반복하여 0개 이상의 출력을 생성할 수 있다.[59]
4. 구성 요소
4. 1. 입력 리더 (Input Reader)
입력 리더는 입력을 적절한 크기의 '분할'로 나눈다. 실질적으로는 일반적으로 64MB에서 128MB 사이로 분할한다. 프레임워크는 각 ''Map'' 함수에 하나의 분할을 할당한다. 입력 리더는 안정적인 저장소(일반적으로 분산 파일 시스템)에서 데이터를 읽어 키/값 쌍을 생성한다.일반적인 예시는 텍스트 파일로 가득 찬 디렉토리를 읽고 각 줄을 레코드로 반환한다.
4. 2. 맵 함수 (Map Function)
맵 함수는 사용자가 정의하는 함수로, 주어진 키와 값의 쌍을 처리하여 중간 결과들을 생성한다.[59] 맵 함수의 입력 및 출력 유형은 서로 다를 수 있다.문서들의 각 단어를 세는 예시에서 맵 함수는 다음과 같이 동작한다.[59]
- 각 줄을 단어로 나눈다.
- 각 단어를 키(key)로, 해당 줄에서 단어의 발생 횟수를 값(value)으로 하는 키/값 쌍을 출력한다. 예를 들어, "apple"이라는 단어가 한 줄에서 2번 나타나면 (apple, 2)를 출력한다.
4. 3. 파티션 함수 (Partition Function)
맵리듀스에서 각 Map 함수의 출력은 샤딩을 위해 애플리케이션의 파티션 함수에 의해 특정 리듀서에 할당된다. 파티션 함수는 키와 리듀서의 수를 입력받아 원하는 리듀서의 인덱스를 반환한다.일반적으로 키를 해시하고 해시 값을 리듀서의 수로 모듈로 연산하는 것이 기본값이다. 부하 분산을 위해 샤드 당 데이터의 대략적인 균등 분포를 제공하는 파티션 함수를 선택하는 것이 중요하다. 그렇지 않으면 맵리듀스 작업이 느린 리듀서가 완료될 때까지 대기하여 지연될 수 있다.
맵 단계와 리듀스 단계 사이에서 데이터는 셔플(shuffle) 과정을 거친다. 이 과정은 맵 노드에서 생성된 데이터를 리듀스될 샤드로 이동하기 위한 노드 간 병렬 정렬 및 교환 단계이다. 셔플은 네트워크 대역폭, CPU 속도, 생성된 데이터 및 맵/리듀스 계산에 소요된 시간에 따라 계산 시간보다 더 오래 걸릴 수 있다.
4. 4. 비교 함수 (Comparison Function)
각 리듀스(Reduce)의 입력은 맵(Map)이 실행된 머신에서 가져오며, 애플리케이션의 비교 함수를 사용하여 정렬된다.4. 5. 리듀스 함수 (Reduce Function)
리듀스 함수는 사용자가 정의하는 함수로, 맵 함수에서 출력된 결과 중 동일한 키를 가진 값들을 병합한다.[59] 맵리듀스는 정렬된 순서대로 각 고유 키에 대해 애플리케이션의 ''Reduce'' 함수를 한 번 호출하며, ''Reduce''는 해당 키와 관련된 값들을 반복하여 0개 이상의 출력을 생성할 수 있다.[59]단어 수 세기 예시에서, ''Reduce'' 함수는 입력 값들을 받아 합산하고, 단어와 최종 합계로 이루어진 단일 출력을 생성한다.[59]
```wikitext
'''function''' reduce(String word, Iterator partialCounts):
''// word: a word''
''// partialCounts: a list of aggregated partial counts''
sum = 0
'''for each''' pc '''in''' partialCounts:
sum += pc
emit (word, sum)
4. 6. 출력 기록기 (Output Writer)
출력 기록기는 리듀스 함수의 출력을 안정적인 저장소에 기록한다.5. 논리적 관점
맵리듀스(MapReduce)의 'Map' 및 'Reduce' 함수는 모두 (키, 값) 쌍으로 구조화된 데이터를 기준으로 정의된다.[14] 'Map'은 한 데이터 도메인의 유형을 가진 한 쌍의 데이터를 입력으로 받아 다른 도메인의 쌍 목록을 반환한다.Map(k1,v1)
→ list(k2,v2)
'Map' 함수는 입력 데이터 세트의 모든 쌍(k1
으로 키가 지정됨)에 병렬로 적용된다. 이를 통해 각 호출에 대해 쌍 목록(k2
로 키가 지정됨)이 생성된다. 그 후, MapReduce 프레임워크는 모든 목록에서 동일한 키(k2
)를 가진 모든 쌍을 수집하고 함께 그룹화하여 각 키에 대해 하나의 그룹을 만든다.
'Reduce' 함수는 각 그룹에 병렬로 적용되며, 이는 동일한 도메인의 값 모음을 생성한다.Reduce(k2, list (v2))
→ list((k3, v3))
[14]
각 'Reduce' 호출은 일반적으로 하나의 키-값 쌍 또는 빈 반환값을 생성하지만, 하나의 호출에서 여러 개의 키-값 쌍을 반환하는 것도 허용된다. 모든 호출의 반환값은 원하는 결과 목록으로 수집된다.
따라서 MapReduce 프레임워크는 (키, 값) 쌍의 목록을 (키, 값) 쌍의 다른 목록으로 변환한다.[15] 이러한 동작은 임의의 값 목록을 받아 map에서 반환된 '모든' 값을 결합하는 단일 값을 반환하는 일반적인 함수형 프로그래밍의 map 및 reduce 조합과는 다르다.
MapReduce를 구현하려면 map 및 reduce 추상화의 구현이 필수적이지만 충분하지는 않다. MapReduce의 분산 구현에는 Map 및 Reduce 단계를 수행하는 프로세스를 연결하는 수단이 필요하다. 이는 분산 파일 시스템일 수 있다. 맵퍼에서 리듀서로 직접 스트리밍하거나 맵핑 프로세서가 결과를 쿼리하는 리듀서에 제공하는 등 다른 옵션도 가능하다.
6. 이론적 배경
모노이드의 속성은 맵리듀스 연산의 유효성을 보장하는 기반이 된다.[17][18]
Algebird 패키지[19]에서 맵/리듀스의 Scala 구현은 명시적으로 모노이드 클래스 타입을 필요로 한다.[20]
맵리듀스 연산은 매핑될 입력 데이터의 유형 ''A''와 리듀스될 출력 데이터의 유형 ''B''를 다룬다. ''Map'' 연산은 유형 ''A''의 개별 값을 가져와 각 ''a:A''에 대해 값 ''b:B''를 생성한다. ''Reduce'' 연산은 ''B''의 값에 정의된 이진 연산 •을 필요로 하며, 사용 가능한 모든 ''b:B''를 단일 값으로 축약한다.
기본 요구 사항은 리듀스될 데이터를 임의로 재그룹화하는 기능을 포함해야 한다는 것이다. 이러한 요구 사항은 연산 •의 두 가지 속성으로 이어진다.
- 결합 법칙: (''x'' • ''y'') • ''z'' = ''x'' • (''y'' • ''z'')
- 중립 원소 ''e''의 존재. 여기서 모든 ''x:B''에 대해 ''e'' • ''x'' = ''x'' • ''e'' = ''x''이다.
두 번째 속성은 여러 노드에서 병렬 처리될 때 처리할 데이터가 없는 노드가 결과에 영향을 미치지 않도록 보장한다.
이 두 가지 속성은 연산 •과 중립 원소 ''e''를 가진 유형 ''B''의 값에 모노이드 (''B'', •, ''e'')가 있음을 의미한다.
유형 ''A''의 값에 대한 요구 사항은 없다. 임의의 함수 ''A'' → ''B''를 ''Map'' 연산에 사용할 수 있다. 이는 카타모르피즘 ''A*'' → (''B'', •, ''e'')가 있음을 의미한다. 여기서 ''A*''는 클레이니 스타, 즉 ''A''에 대한 리스트의 유형을 나타낸다.
''Shuffle'' 연산 자체는 맵리듀스의 본질과 관련이 없으며, 클라우드에서 계산을 분산시키는 데 필요하다.
모든 이진 ''Reduce'' 연산이 맵리듀스에서 작동하는 것은 아니다. 하위 트리를 사용하여 트리를 구축하는 연산은 결합 법칙이 성립하지 않으며, 결과는 그룹화에 따라 달라진다. 평균의 직접적인 계산 역시 결합 법칙이 성립하지 않으며 (그리고 중립 원소가 없다), 평균을 계산하려면 적률을 계산해야 한다.
7. 장점 및 한계
7. 1. 장점
맵리듀스는 수 페타바이트 이상의 대규모 데이터를 처리할 수 있도록 설계되었다. 맵 및 리듀스 작업을 여러 노드에 분산하여 병렬 처리함으로써 처리 속도를 높인다.맵리듀스는 네트워크의 각 노드에 데이터 집합에 대한 여러 작업을 분할하여 신뢰성을 확보한다. 각 노드는 완료된 작업과 상태 업데이트를 주기적으로 보고하도록 되어 있다. 노드가 해당 간격보다 더 오랫동안 응답이 없으면 마스터 노드(구글 파일 시스템의 마스터 서버와 유사)는 해당 노드를 죽은 것으로 기록하고 해당 노드에 할당된 작업을 다른 노드로 보낸다. 개별 작업은 병렬로 실행되는 충돌하는 스레드가 없는지 확인하기 위해 파일 출력의 이름을 지정하는 데 원자적 연산을 사용한다. 파일의 이름을 바꾸는 경우, 작업 이름 외에 다른 이름으로 복사할 수도 있다 (부작용 허용).
리듀스 연산도 거의 같은 방식으로 작동한다. 병렬 연산과 관련하여 이러한 연산이 갖는 열등한 속성 때문에 마스터 노드는 리듀스 연산을 동일한 노드 또는 연산 대상 데이터를 보유한 노드와 동일한 랙에서 예약하려고 시도한다. 이 속성은 데이터 센터의 백본 네트워크에서 대역폭을 절약하므로 바람직하다.
일부 노드에 장애가 발생하더라도 작업을 다른 노드에서 다시 실행하여 전체 작업이 중단되지 않도록 한다. 구현은 반드시 신뢰성이 높지는 않다. 예를 들어, 이전 버전의 하둡에서 ''NameNode''는 분산 파일 시스템의 단일 장애점이었다. 최신 버전의 하둡은 "NameNode"에 대한 액티브/패시브 페일오버를 통해 높은 가용성을 제공한다.
맵리듀스 모델은 비교적 단순하여 개발자가 쉽게 이해하고 사용할 수 있다.
7. 2. 한계
맵리듀스는 플랫폼의 최적화된 셔플 연산을 활용하고, 프로그램의 "맵(Map)" 및 "리듀스(Reduce)" 부분만 작성하면 된다는 주요 이점이 있지만, 실제로는 셔플 단계를 고려해야 한다.[21] 파티션 함수와 "맵" 함수에 의해 기록되는 데이터의 양은 성능과 확장성에 큰 영향을 미칠 수 있으며, "콤비너(Combiner)" 함수와 같은 추가 모듈은 디스크에 기록되고 네트워크를 통해 전송되는 데이터 양을 줄이는 데 도움이 될 수 있다.[21]맵리듀스 알고리즘 설계 시, 계산 비용과 통신 비용 사이의 균형점을 잘 선택해야 하는데,[22] 통신 비용이 계산 비용보다 더 큰 경우가 많다.[22][21] 맵리듀스 구현은 충돌 복구를 위해 모든 통신을 분산 스토리지에 기록하도록 설계되어 있다. 맵퍼에 의해 생성되는 데이터의 양은 매핑과 리듀싱 사이 계산 비용의 대부분을 이동시키는 주요 변수이다. 리듀싱에는 비선형 복잡성을 갖는 정렬(키 그룹화)이 포함되므로, 작은 파티션 크기는 정렬 시간을 줄이지만, 리듀서 수가 많으면 실용적이지 않을 수 있다.[23]
프로세스가 빠르게 완료되고 데이터가 단일 머신 또는 소규모 클러스터의 주 메모리에 맞는 경우, 맵리듀스 프레임워크는 효과적이지 않다. 맵리듀스 프레임워크는 계산 중 전체 노드의 손실로부터 복구하도록 설계되어 중간 결과를 분산 스토리지에 기록하는데, 이 충돌 복구는 비용이 많이 들기 때문이다. 몇 초 안에 완료되는 작업은 오류 발생 시 단순히 다시 시작할 수 있으며, 클러스터 크기가 커짐에 따라 하나의 머신이 고장날 가능성은 빠르게 증가한다. 따라서 이러한 경우 모든 데이터를 메모리에 유지하고 노드 실패 시 계산을 다시 시작하거나, 데이터가 충분히 작을 경우 비분산 솔루션이 맵리듀스 시스템보다 더 빠를 수 있다.
맵리듀스 작업은 비순환 데이터 흐름 프로그램, 즉 상태가 없는 맵퍼와 상태가 없는 리듀서로 작성되어 배치 작업 스케줄러에 의해 실행되어야 한다. 이러한 패러다임은 데이터 세트의 반복적인 쿼리를 어렵게 만들고, 여러 번 단일 작업 집합을 재방문하는 반복적인 알고리즘이 일반적인 그래프 처리[55]와 기계 학습 분야에서 제약이 느껴진다.[56]
8. 활용 분야
맵리듀스는 분산 패턴 기반 검색, 분산 정렬, 웹 링크 그래프 반전, 특이값 분해,[24] 웹 액세스 로그 통계, 역색인 구축, 문서 클러스터링, 머신 러닝,[25] 및 통계적 기계 번역을 포함한 광범위한 응용 분야에서 유용하다.[24] 맵리듀스 모델은 멀티 코어 및 매니 코어 시스템,[26][27][28] 데스크톱 그리드,[29] 멀티 클러스터,[30] 자원 봉사 컴퓨팅 환경,[31] 동적 클라우드 환경,[32] 모바일 환경,[33] 및 고성능 컴퓨팅 환경과 같은 여러 컴퓨팅 환경에 적용되었다.[34]
구글에서는 맵리듀스를 사용하여 구글의 월드 와이드 웹 색인을 완전히 재생성했다. 이는 색인을 업데이트하고 다양한 분석을 실행하는 이전의 ''임시'' 프로그램을 대체했다.[35] 구글에서의 개발은 이후 배치 처리 대신 스트리밍 작업 및 업데이트를 제공하여 완전한 색인을 다시 구축하지 않고도 "실시간" 검색 결과를 통합할 수 있도록 하는 Percolator, FlumeJava[36] 및 MillWheel과 같은 기술로 이동했다.[37]
맵리듀스의 안정적인 입력 및 출력은 일반적으로 분산 파일 시스템에 저장된다. 임시 데이터는 일반적으로 로컬 디스크에 저장되며 리듀서에 의해 원격으로 가져온다.
9. 대한민국에서의 활용
대한민국에서도 맵리듀스는 다양한 분야에서 활용되고 있다.
10. 관련 기술
맵리듀스는 대규모 데이터 처리를 위한 분산 프로그래밍 모델로, 구글에서 개발하여 2004년에 발표했다. 이 모델은 함수형 프로그래밍의 맵(Map)과 리듀스(Reduce) 함수를 기반으로 한다. 맵리듀스는 여러 대의 컴퓨터를 활용하여 대용량 데이터를 병렬로 처리하는 방식을 사용한다.
맵리듀스와 관련된 주요 기술은 다음과 같다:
- 아파치 하둡(Apache Hadoop): 맵리듀스 모델의 대표적인 오픈 소스 구현체이다.
- 아파치 스파크(Apache Spark): 맵리듀스의 한계를 극복하고 인메모리(In-Memory) 처리를 지원하는 분산 처리 프레임워크이다.
- 아파치 플링크(Apache Flink): 실시간 데이터 스트림 처리에 특화된 분산 처리 프레임워크이다.
그 외에도 맵리듀스와 관련된 기술로는 아파치 CouchDB, 인피니스팬, Riak, 구글의 빅테이블(BigTable), 오류 잊음형 컴퓨팅(エラー忘却型コンピューティング), 하둡(Hadoop) 등이 있다.
11. 비판
데이비드 디윗과 마이클 스톤브레이커는 병렬 데이터베이스와 공유 없음 아키텍처를 전문으로 하는 컴퓨터 과학자들로, 맵리듀스를 사용할 수 있는 문제의 광범위성에 대해 비판적인 입장을 보였다.[38] 그들은 맵리듀스의 인터페이스가 지나치게 저수준이라고 지적하며, 맵리듀스가 지지자들이 주장하는 패러다임 전환을 실제로 나타내는 것인지 의문을 제기했다.[39] 또한, 맵리듀스 지지자들이 주장하는 참신성에 대해 이의를 제기하며, 20년 이상 존재해 온 테라데이터를 선행 기술의 예시로 제시했다.[39] 그들은 또한 맵리듀스 프로그래머를 CODASYL 프로그래머에 비유하며, 둘 다 "저수준 언어로 작성하며 저수준 레코드 조작을 수행한다"고 언급했다.[39] 맵리듀스는 입력 파일을 사용하고 논리 스키마를 지원하지 않아, B-tree 및 해시 파티셔닝과 같은 일반적인 데이터베이스 시스템 기능으로 인한 성능 향상을 얻을 수 없다.
하지만, 맵리듀스는 데이터베이스 시스템을 대체하기 위한 것이 아니라, 대규모 데이터 처리를 위한 새로운 접근 방식이라는 반박도 있다. 그렉 조겐슨은 맵리듀스가 데이터베이스로 설계되거나 사용될 의도가 전혀 없었기 때문에, 디윗과 스톤브레이커의 분석 전체가 근거 없다고 주장한다.[43]
디윗과 스톤브레이커는 이후 2009년에 여러 특정 문제에 대해 하둡의 맵리듀스 방식과 관계형 데이터베이스 관리 시스템 방식을 비교하는 상세한 벤치마크 연구를 발표했다.[44] 그들은 관계형 데이터베이스가 많은 종류의 데이터 사용, 특히 복잡한 처리나 기업 전체에서 데이터를 사용할 때 실질적인 이점을 제공하지만, 맵리듀스는 간단하거나 일회성 처리 작업에 사용자 친화적일 수 있다고 결론지었다.
최근에는 Pig (또는 PigLatin), Sawzall, 아파치 하이브,[40] HBase[41] 및 Bigtable[41][42]과 같은 프로젝트들은 맵리듀스의 문제점 일부를 해결하고 있다.
맵리듀스 프로그래밍 패러다임은 대니 힐리스의 1985년 논문[45]에서 커넥션 머신에서 사용하기 위해 설명되었으며, "xapping/reduction"[46]이라고 불리고, 맵과 리듀스 모두를 가속화하기 위해 해당 머신의 특수 하드웨어에 의존했다. 궁극적으로 커넥션 머신에 사용된 방언인 1986년 StarLisp는 병렬 *map
및 reduce!!
를 가지고 있었으며,[47] 이는 다시 1984년 Common Lisp에 기반을 두었으며, 비병렬 map
및 reduce
가 내장되어 있었다.[48] 커넥션 머신의 하이퍼큐브 인터넷워크 토폴로지가 시간에 reduce
를 실행하기 위해 사용하는 트리형 접근 방식[49]은 Google 논문에서 이전 작업으로 언급된 접근 방식과 사실상 동일하다.
2010년에 구글은 맵리듀스에 대한 특허를 받았다. 2004년에 출원된 이 특허는 하둡, CouchDB 등을 포함한 오픈 소스 소프트웨어의 맵리듀스 사용을 포함할 수 있다. ''Ars Technica''의 한 편집자는 맵리듀스 개념을 대중화하는 데 구글의 역할을 인정했지만, 이 특허가 유효하거나 참신한지에 대해 의문을 제기했다.[50][51] 2013년, 구글은 "오픈 특허 비침해 (OPN) 서약"의 일환으로 이 특허를 방어적으로만 사용할 것을 약속했다.[52][53] 이 특허는 2026년 12월 23일에 만료될 예정이다.[54]
맵리듀스 작업은 비순환 데이터 흐름 프로그램, 즉 상태가 없는 맵퍼와 상태가 없는 리듀서로 작성되어야 하며, 이는 배치 작업 스케줄러에 의해 실행된다. 이러한 패러다임은 데이터 세트의 반복적인 쿼리를 어렵게 만들고, 여러 번 단일 작업 집합을 재방문하는 반복적인 알고리즘이 일반적인 그래프 처리[55]와 같이 제약이 느껴지는 분야뿐만 아니라, 하드 디스크 드라이브 기반 데이터의 높은 지연 시간으로 인해 데이터에 대한 여러 패스가 필요한 기계 학습 분야에서도 제약이 느껴진다. 알고리즘은 각 패스에서 데이터에 대한 직렬 접근을 허용할 수 있다.[56]
참조
[1]
웹사이트
MapReduce Tutorial
https://hadoop.apach[...]
2019-07-03
[2]
웹사이트
Google spotlights data center inner workings
http://news.cnet.com[...]
2008-05-30
[3]
웹사이트
MapReduce: Simplified Data Processing on Large Clusters
http://static.google[...]
[4]
논문
The split-apply-combine strategy for data analysis
[5]
문서
"MapReduce: Simplified Data Processing on Large Clusters"
http://research.goog[...]
Google Research
[6]
논문
Google's Map ''Reduce'' programming model — Revisited
[7]
문서
MPI 2 standard
http://www.mcs.anl.g[...]
[8]
웹사이트
MPI Reduce and Allreduce · MPI Tutorial
http://mpitutorial.c[...]
[9]
웹사이트
Performing Parallel Rank with MPI · MPI Tutorial
http://mpitutorial.c[...]
[10]
웹사이트
MongoDB: Terrible MapReduce Performance
https://stackoverflo[...]
Stack Overflow
2010-10-16
[11]
웹사이트
Google Dumps MapReduce in Favor of New Hyper-Scale Analytics System
http://www.datacente[...]
2015-10-25
[12]
뉴스
Why MapReduce Is Still A Dominant Approach For Large-Scale Machine Learning
https://analyticsind[...]
2019-04-05
[13]
웹사이트
Sorting Petabytes with MapReduce – The Next Episode
http://googleresearc[...]
2011-09-07
[14]
웹사이트
MapReduce Tutorial
https://hadoop.apach[...]
[15]
웹사이트
Apache/Hadoop-mapreduce
https://github.com/a[...]
2021-08-31
[16]
웹사이트
Example: Count word occurrences
http://research.goog[...]
Google Research
2013-09-18
[17]
논문
An algebra for distributed Big Data analytics
[18]
arXiv
Monoidify! Monoids as a Design Principle for Efficient MapReduce Algorithms
2013-04-29
[19]
웹사이트
Abstract Algebra for Scala
https://twitter.gith[...]
[20]
웹사이트
Encoding Map-Reduce As A Monoid With Left Folding
http://erikerlandson[...]
2016-09-05
[21]
논문
BSP cost and scalability analysis for MapReduce operations
2015-01-01
[22]
논문
Designing good MapReduce algorithms
http://xrds.acm.org/[...]
[23]
논문
Scheduling divisible MapReduce computations
2010-12-01
[24]
웹사이트
Dimension Independent Matrix Square Using MapReduce
https://stanford.edu[...]
2014-07-12
[25]
웹사이트
Map-Reduce for Machine Learning on Multicore
http://www.willowgar[...]
NIPS 2006
[26]
서적
2007 IEEE 13th International Symposium on High Performance Computer Architecture
[27]
서적
Proceedings of the 17th international conference on Parallel architectures and compilation techniques – PACT '08
[28]
서적
Proceedings of the 19th international conference on Parallel architectures and compilation techniques – PACT '10
[29]
서적
2010 International Conference on P2P, Parallel, Grid, Cloud and Internet Computing
[30]
서적
Proceedings of the second international workshop on Emerging computational methods for the life sciences (ECMLS '11)
[31]
서적
Proceedings of the 19th ACM International Symposium on High Performance Distributed Computing – HPDC '10
[32]
논문
P2P-MapReduce: Parallel data processing in dynamic Cloud environments
[33]
서적
Proceedings of the 3rd International Conference on PErvasive Technologies Related to Assistive Environments – PETRA '10
[34]
서적
2014 IEEE 28th International Parallel and Distributed Processing Symposium
IEEE
2014-05
[35]
웹사이트
How Google Works
http://www.baselinem[...]
baselinemag.com
2006-07-07
[36]
서적
Proceedings of the 31st ACM SIGPLAN Conference on Programming Language Design and Implementation
https://static.googl[...]
2016-08-04
[37]
간행물
Large-scale Incremental Processing Using Distributed Transactions and Notifications
OSDI
2010-10
[38]
웹사이트
Database Experts Jump the MapReduce Shark
http://typicalprogra[...]
[39]
웹사이트
MapReduce: A major step backwards
http://craig-henders[...]
craig-henderson.blogspot.com
2008-08-27
[40]
웹사이트
Apache Hive – Index of – Apache Software Foundation
https://cwiki.apache[...]
[41]
웹사이트
HBase – HBase Home – Apache Software Foundation
http://hbase.apache.[...]
[42]
웹사이트
Bigtable: A Distributed Storage System for Structured Data
http://research.goog[...]
[43]
웹사이트
Relational Database Experts Jump The MapReduce Shark
http://typicalprogra[...]
typicalprogrammer.com
2009-11-11
[44]
웹사이트
A Comparison of Approaches to Large-Scale Data Analysis
http://database.cs.b[...]
Brown University
2010-01-11
[45]
서적
The Connection Machine
https://archive.org/[...]
MIT Press
1986
[46]
웹사이트
Connection Machine Model CM-2 Technical Summary
http://bitsavers.tra[...]
Thinking Machines Corporation
2022-11-21
[47]
웹사이트
Supplement to the *Lisp Reference Manual
https://www.software[...]
Thinking Machines Corporation
2022-11-21
[48]
웹사이트
Rediflow Architecture Prospectus
https://collections.[...]
University of Utah School of Computing
2022-11-21
[49]
서적
Hypercube Algorithms for Image Processing and Pattern Recognition
https://www.cise.ufl[...]
University of Florida
2022-12-08
[50]
뉴스
Google's MapReduce patent: what does it mean for Hadoop?
https://arstechnica.[...]
2010-01-20
[51]
웹사이트
United States Patent: 7650331 - System and method for efficient large-scale data processing
http://patft.uspto.g[...]
[52]
뉴스
Google Makes Open Patent Non-assertion Pledge and Proposes New Licensing Models
https://www.eff.org/[...]
2013-03-28
[53]
뉴스
Google expands open patent pledge to 79 more about data center management
https://www.zdnet.co[...]
2013
[54]
웹사이트
System and method for efficient large-scale data processing
https://patents.goog[...]
Google Patents Search
2004-06-18
[55]
conference
Map-Based Graph Analysis on MapReduce
https://csc.csudh.ed[...]
IEEE
2013-10-06
[56]
conference
Spark: Cluster Computing with Working Sets
https://amplab.cs.be[...]
2010-06
[57]
웹인용
Google spotlights data center inner workings
http://news.cnet.com[...]
2014-01-23
[58]
문서
[59]
웹인용
Example: Count word occurrences
http://research.goog[...]
Google Research
2013-09-18
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com