-
Hadoop) Map-Reduce 개념과 예시 & YARN에 기반한 처리엔진 SparkDistributed File System/Hadoop 2021. 1. 17. 18:22
# Map-Reduce
YARN이 클러스터 전체에 계산을 분산하고 보관된 데이터를 확장가능하게 처리하는 방법을 제공해줬다면, Map-Reduce는 YARN 이 제공한 환경에서 하둡이 맨 처음에 지원한 데이터를 처리하는 모델이다. (그러나 Map-Reduce는 구글꺼다...)
Map-Reduce의 병렬처리모델은 3단계로 나누어지며, 그 3 단계는 map, shuffle, reduce 이다.
# Map, Shuffle, Reduce
1. Map
- 입력데이터가 클러스터에서 병렬로 처리되며, 이를 수행하는 mapper 함수는 원시데이터를 {key, value} 쌍으로 변환한다.
2. Shuffle
- mapper를 거쳐 변환된 데이터는 키를 기준으로 정렬되어 버킷(bucket)으로 셔플링된다.
(키가 같은값들은 모두 동일한 reducer로 전달된다)
3. Reduce
- Reducer는 모든 키의 값을 처리하며 결과를 HDFS나 다른 영구저장소에 저장한다.
Map, Shuffle, Reduce 세 단계는 각각 무상태(stateless)이거나 극히 제한적인 상태만 유지한다.
예를 들면, 매퍼나 리듀서는 현재 입력받은 데이터를 이전 데이터들과 무관하게 처리하는데, 이는 각 단계의 매퍼 또는 리듀서가 어느 노드에서 실행될지 알 수 없기 때문이다.
단, 리듀스 단계에서는 키 값이 같은 모든 데이터를 참조한다. 이와 같은 연산방식은 엉성해보일수도있지만, 문제가 없다고 한다.
# Map-Reduce의 대표적 예시
(Corpus에 포함된 단어의 빈도를 세는 word-count)
1. HDFS에 Text 데이터 저장
2. 하둡은 자동으로 데이터를 블록단위(64MB)로 쪼갠뒤, HDFS 서버로 분산해 중복저장
3. 여러개로 분산된 mapper가 각 블록을 병렬로 읽어들여 Text의 단어들을 {Key, Value} 쌍으로 분리
ex_) This day is nice day. => {This, 1}, {day, 1}, {is, 1}, {nice, 1}, {day, 1}
4. 동일 키를 모아 shuffling후 Reducer에 전달
(Reducer의 입력 데이터는 {This, 1}, {day, 1}, {is, 1}, {nice, 1}, {day, 1} 가 key값 끼리 정렬된 형태)
5. Reducer가 할일은 word-count 이므로, 같은 key를 가진 모든 값을 단순히 덧셈연산
ex_) Output : {This, 1}, {day, 2}, {is, 1}, {nice, 1}
* 여러 Reducer가 사용될 경우, mapper의 출력데이터들은 키 값으로 묶여 특정 Reducer로 전달된다.
- word-count 예제에서 reducer가 4개 사용되었다 가정하면, this, day, is, nice 총 4개의 키를 가지고,
reducer1은 this 1개를 , reducer2는 day 2개를, reducer3은 is 1개를 reducer4는 nice 2개를 전달받아 각자 총 몇개인지 카운팅한다.
* 더 편리한 방법은 전달하기 전에 각 단어의 갯수를 미리세서 전달하는 것인데, 이를 combiner라 한다.
(combiner 또한 하둡이 지원하는 데이터처리 모델이다)
* 모든 문제가 Map-Reduce로 변환되지 않는다. Map-Reduce로 변환할 수 있다해도, 변환이 복잡하거나 효율성이 떨어질 수 있다.
- 특히 반복이 많은작업에 적합하지 않다. 따라서 반복적인 수렴과정(converge)이 필요한 과학실험이나 머신러닝 알고리즘, 그래프연산에는 적합하지 않다.
* 선형대수의 power method(멱방법) 이나 머신러닝에서 활용되는 gradient decent(경사하강법)은 대표적인 반복적인 알고리즘이다.
# YARN에 기반한 다양한 처리엔진
1. 아파치 테즈(Tez)
- 하나의 맵리듀스 단계를 넘어 여러 리듀스 단계로 확장될때, 리듀스작업간에 교환되는 데이터를 정렬할 필요가없는 경우에 특화
- Tez의 목표는 기본 하둡 SQL 엔진인 HIVE의 데이터 조인쿼리를 더 효율적으로 실행 & 데이터 흐름을 효율적으로 구현
- 한 작업의 리듀서가 중간 데이터를 HDFS에 저장하지 않고 직접 다른 리듀서로 전송 할 수 있음
2. 아파치 스파크(Spark)
- 데이터 과학에서 자주 등장하는 반복연산에 더 적합한 개념과 기능을 제공하는 in-memory 데이터 처리 엔진
- 기본적인 분산처리 기능뿐만 아니라, 여러 컴포넌트가 추가되며 가장 인기 있는 아파치 프로젝트로 성장
* Spark가 빠른 이유
- 데이터를 분산 메모리로 캐싱하여 빠른 연산과 저지연 응답속도를 달성
- 또한 메모리에 올려 둔 데이터셋을 반복적으로 사용할 수 있어 머신러닝에서도 빠른 응답속도 달성
728x90'Distributed File System > Hadoop' 카테고리의 다른 글
Hadoop) YARN 의 등장 배경과 아키텍쳐 및 하는일 (0) 2021.01.17 데이터과학) 빅데이터 시대가 도래한 이후, 기업의 변화와 변화의 근간에 대하여 (with Hadoop) + 비즈니스 활용사례 (0) 2021.01.17 하둡 HDFS 개요 (101 of Hadoop Distributed File System) (0) 2020.11.30