일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- merge
- DBSCAN
- dict
- list
- SQL on 하둡
- k-means
- 교차검증
- 다중공선성
- 병렬 쿼리 시스템
- hive
- 데이터프레임
- Python
- 가설검정
- 딕셔너리
- 분포
- Sawzall
- p-value
- T-검정
- pig
- 밀도기반
- DataFrame
- SPLIT
- 하둡
- 결정계수
- distribution
- join
- cross validation
- 유사도
- 분산분석
- pca
- Today
- Total
one of a kind scene
4-2 데이터 처리 기술_분산 컴퓨팅 기술 part1_MapReduce 본문
분산 컴퓨팅 기술 part1_MapReduce
MapReduce는 대용량 데이터를 분산 처리 하기 위한 프로그래밍 모델
1. 개념 및 특징
• MapReduce는 구글에서 분산 병렬 컴퓨팅을 이용하여 대용량 데이터를 처리하기 위한 목적으로 제작한 소프트웨어 프레임 워크
• 분할정복 방식으로 대용량 데이터를 병렬로 처리할 수 있는 프로그래밍 모델
• 분할정복(divide and conquer) : 해결하고자 하는 문제를 성질이 같은 여러 부분으로 나누어 해결한 뒤, 원래 문제의 해를 구하는 방식
• 구글 외에 아파치 하둡에서 오픈 소스 프로젝트로 시작한 자바(Java) 기반의 'Hadoop MapReduce' 프레임 워크가 동일한 기능 지원
• Client의 수행 작업 단위는 맵리듀스 잡(MapReduce Job)이라고 함
• Map Task 하나가 1개의 블록(64MB)을 대상으로 연산 수행
• (예) 320MB의 파일 → 5개의 Map Task 생성
• Map 과정에서 생산된 중간 결과물들을 사용자가 지정한 개수에 해당되는 Reduce Task들이 받아와서 정렬 및 필터링 작업을 거쳐서 최종 결과물(output)을 만들어 냄
2. 구글 MapReduce
① 구글 MapReduce 개발 배경
• 대용량 처리하는 데에 있어서 연산의 병렬화, 장애 복구 등의 복잡성을 추상화시켜서 개발자들이 오직 핵심 기능 구현에만 집중할 수 있도록 하기 위해 MapReduce를 만듦
② 프로그래밍 모델 : Map과 Reduce라는 2개의 단계
• Map에서는 (key, value)쌍 형태로 입력된 문장을 변환 (예) I love you → (I, 1) , (love, 1) , (you, 1)
• (key, value)쌍으로 변환된 문장은 shuffling과 group by정렬 과정을 자동으로 거친 후 (key, [value list]) 형식으로 Reduce에게 전송
• (key, [value list]) 형식으로 Reduce에 입력되면 사용자가 정의한 Reduce 함수를 통해 최종 Output으로 산출됨
• 사용자 관점에서는 장애 복구와 같은 세세한 이슈들은 신경 쓸 필요 없이, Map과 Reduce 두 함수만 작성하는 것만으로 대규모 병렬 연산 작업을 수행할 수 있다.
• (과정1) 문장 변환 : I love book book book → (I, 1) , (love, 1), (book, 1), (book, 1) , (book, 1)
• (과정2) Map과정 후(=Reduce에 전달되는 모양) : (I, [1]) , (love, [1]) , (book, [1,1,1])
• (과정3) Reduce 과정 후(사용자가 정의한 Reduce 함수가 sum인 경우) : (I, 1) , (love, 1) , (book, 3)
③ 실행 과정
• 사용자가 MapReduce 프로그램 작성 및 실행
• Master는 사용자가 작성한 MapReduce 프로그램에서 지정한 입력 데이터소스를 가지고 MapReduce를 하기위한 스케줄링 실시
• 큰 파일은 여러 개의 파일split들로 나뉘며, 각 split들이 Map 프로세스들의 할당 단위가 됨
• 보통 split 단위는 블록 사이즈인 64MB 또는 128MB
• split 수만큼 Map Task들이 워커로부터 fork되며, Output을 로컬 파일시스템에 저장
• Output 값들은 pratitioner라는 Reduce 번호를 할당해 주는 클래스를 통해 어떤 Reduce에게 보내질지 정해짐
• 특별히 정해지지 않으면 Key와 해시(Hash)값을 Reduce갯수로 Modular(=나눠서 나머지값) 계산한 값이 부여되어 동일한 Key들은 같은 Reduce에 배정
• Map 단계가 끝나면 원격의 Reduce 워커들이 자기에 할당된 Map의 중간 값들을 네트워크로 가져, 사용자의 Reduce 로직을 실행해 최종 산출물을 얻어냄