본문 바로가기
-----ETC2-----/고급 프로그래밍 기술

[고급 프로그래밍] Week 5: MapReduce 개념과 아키텍처

by cogito21_python 2024. 6. 2.
반응형

Day 1: MapReduce 개념

  • 강의 내용:
    • MapReduce의 정의
      • MapReduce란 무엇인가?
      • Map과 Reduce의 기본 개념
    • MapReduce의 역사와 배경
      • Google의 MapReduce 논문
      • 분산 데이터 처리의 필요성
    • MapReduce의 주요 기능
      • 데이터 병렬 처리
      • 대규모 데이터 집합의 처리
  • 실습:
    • 간단한 MapReduce 개념 시뮬레이션
from collections import defaultdict

def map_function(document):
    for word in document.split():
        yield (word.lower(), 1)

def reduce_function(word, counts):
    yield (word, sum(counts))

documents = ["Hello world", "Hello MapReduce", "MapReduce is awesome"]

# Map step
mapped = []
for doc in documents:
    mapped.extend(map_function(doc))

# Shuffle and sort step
shuffled = defaultdict(list)
for key, value in mapped:
    shuffled[key].append(value)

# Reduce step
reduced = []
for key, values in shuffled.items():
    reduced.extend(reduce_function(key, values))

print(reduced)

 

Day 2: MapReduce 아키텍처

  • 강의 내용:
    • MapReduce 아키텍처 구성 요소
      • 클라이언트 (Client)
      • 마스터 (Master)
      • 워커 (Worker)
    • Map 단계와 Reduce 단계
      • Map 단계: 입력 데이터를 키-값 쌍으로 변환
      • Reduce 단계: 키-값 쌍을 집계하여 결과 생성
    • MapReduce 작업 흐름
      • 입력 분할 (Input Splitting)
      • 맵핑 (Mapping)
      • 셔플링 (Shuffling)
      • 리듀싱 (Reducing)
  • 실습:
    • MapReduce 작업 흐름 시뮬레이션
def map_function(document):
    for word in document.split():
        yield (word.lower(), 1)

def reduce_function(word, counts):
    yield (word, sum(counts))

def map_reduce(documents):
    # Map step
    mapped = []
    for doc in documents:
        mapped.extend(map_function(doc))

    # Shuffle and sort step
    shuffled = defaultdict(list)
    for key, value in mapped:
        shuffled[key].append(value)

    # Reduce step
    reduced = []
    for key, values in shuffled.items():
        reduced.extend(reduce_function(key, values))
    
    return reduced

documents = ["Hello world", "Hello MapReduce", "MapReduce is awesome"]
result = map_reduce(documents)
print(result)

 

Day 3: Map 단계 구현

  • 강의 내용:
    • Map 함수의 역할
      • 입력 데이터를 분할하여 키-값 쌍 생성
      • 데이터 필터링 및 변환
    • Map 함수 설계
      • 키-값 쌍 생성 전략
      • 데이터 필터링 및 변환 방법
    • Map 함수 예제
      • 단어 수 세기 (Word Count)
      • 로그 파일 분석
  • 실습:
    • 단어 수 세기를 위한 Map 함수 구현
def map_function(document):
    for word in document.split():
        yield (word.lower(), 1)

document = "Hello world Hello MapReduce"
mapped = list(map_function(document))
print(mapped)

 

Day 4: Reduce 단계 구현

  • 강의 내용:
    • Reduce 함수의 역할
      • 중간 결과를 집계하여 최종 결과 생성
      • 데이터 집계 및 계산
    • Reduce 함수 설계
      • 중간 결과의 병합 및 집계 방법
      • 결과 데이터 생성 전략
    • Reduce 함수 예제
      • 단어 수 세기 (Word Count)
      • 로그 파일 분석
  • 실습:
    • 단어 수 세기를 위한 Reduce 함수 구현
def reduce_function(word, counts):
    yield (word, sum(counts))

shuffled = {'hello': [1, 1], 'world': [1], 'mapreduce': [1]}
reduced = []
for key, values in shuffled.items():
    reduced.extend(reduce_function(key, values))

print(reduced)

 

Day 5: MapReduce의 장단점

  • 강의 내용:
    • MapReduce의 장점
      • 대규모 데이터 처리
      • 병렬 처리 및 분산 처리
      • 확장성 (Scalability)
    • MapReduce의 단점
      • 처리 지연 (Latency)
      • 복잡한 데이터 흐름
      • 디버깅의 어려움
    • MapReduce의 활용 사례
      • 빅데이터 분석
      • 로그 파일 처리
      • 데이터 마이닝
  • 실습:
    • MapReduce의 장단점을 비교 분석하는 연습
### 장단점 분석 예시
1. 장점
   - 대규모 데이터셋을 병렬로 처리 가능
   - 클러스터를 이용한 확장성
   - 다양한 데이터 소스 처리 가능

2. 단점
   - 복잡한 데이터 흐름 및 관리
   - 디버깅 및 오류 추적의 어려움
   - 처리 지연으로 인한 실시간 처리의 어려움

 

Day 6: 프로젝트 준비

  • 강의 내용:
    • 프로젝트 주제 선정 및 요구사항 분석
      • 프로젝트 주제 및 요구사항 확정
      • 프로젝트 설계 및 계획 수립
    • 프로젝트 구현 준비
      • 데이터 구조 및 알고리즘 설계
      • MapReduce 작업 관리 및 최적화 계획
  • 실습:
    • 프로젝트 주제 및 요구사항 분석
    • 프로젝트 설계 및 계획 수립
### 프로젝트 주제 예시
1. 분산 로그 분석 시스템 개발
2. 대규모 텍스트 데이터 처리 플랫폼 구축

### 프로젝트 요구사항 예시
1. 분산 로그 분석 시스템:
   - 대규모 로그 데이터를 분산 처리
   - MapReduce를 통한 로그 데이터 분석
   - 분석 결과 저장 및 시각화

2. 대규모 텍스트 데이터 처리 플랫폼:
   - 대규모 텍스트 데이터를 분할하여 처리
   - 데이터 필터링 및 변환
   - 분석 결과 저장 및 시각화

### 프로젝트 설계 및 계획 예시
1. 데이터 입력 모듈 구현
2. MapReduce 알고리즘 구현
3. 데이터 출력 및 성능 분석 모듈 구현

 

 

반응형