본문 바로가기
데이터 엔지니어( 실습 정리 )/hadoop

2. 맵 리듀스 ( 하둡 기초 )

by 세용용용용 2025. 9. 6.

[ "하둡 완벽 가이드 4판" ] 공부한 후 정리한 내용 입니다

 

 

2. 맵 리듀스


1) 맵 리듀스

  • 맵리듀스(MapReduce): 대용량 데이터를 병렬로 처리하는 프로그래밍 모델
  • 핵심 아이디어:
    1. 데이터를 작은 조각(split) 으로 나누기
    2. 여러 컴퓨터(노드)에서 동시에 처리
    3. 결과를 합쳐 최종 값 계산

 

 

 

2) 기상 데이터 분석 ( 예시 )

  • 수만 개 관측소 → 수 많은 작은 파일 존재
  • 문제: 하둡은 작은 파일 처리 비효율 → 큰 파일이 처리하기 좋음 → 적당한 수준으로 파일 병합 필요

 

1. 유닉스 도구로 처리

  • for문으로 연도별 파일 읽고, awk로 최고 기온 계산
  • 단일 머신 처리: 40분 소요
  • 병렬 처리 필요 → 하드웨어 스레드 사용 가능
  • 문제점:
    1. 작업 단위 균일화 어려움 → 작은 파일은 금방 끝나고 큰 파일은 오래 걸림 해결: 데이터를 고정 길이 청크로 나누고 각 청크를 프로세스에 할당
    2. 각 프로세스 결과를 합치고 연도 기준 정렬 필요
    3. 여러 머신 사용 시 코디네이션, 신뢰성 관리 필요 해결: 하둡과 같은 프레임워크 사용

 

 

 

3) 하둡에서 맵 리듀스 처리

1. Map & Reduce

  • 입력/출력 = 키(Key)-값(Value) 쌍

-- 원본 데이터 --

2025-09-01 25℃
2025-09-02 26℃
2025-09-03 24℃
...

 

 

 

-- 맵 함수 입력 --

(0, "2025-09-01 25℃")
(15, "2025-09-02 26℃")
(30, "2025-09-03 24℃")
...

key = 파일 시작 위치 ( 바이트 ), offset
value = 해당 행 텍스트

 

-- 맵 합수( 데이터 준비 ) 출력 → 연도와 기온 추출 --

("2025", 25)
("2025", 26)
("2025", 24)
...

key = 연도
value = 기온

 

-- 리듀스 입력 → 키 기준 정렬 및 그룹화 --

("2024", [28, 30])
("2025", [25, 26, 24])
...

key = 연도
value = 기온 ( 그룹화 )

 

-- 리듀스 출력 → 최고 기온 계산 --

("2024", 30)
("2025", 26)
...

key = 연도
value = 기온

 

 

 

4) 하둡 분산 처리 구조

1. 작업 단위( Job )와 YARN

  • Job → 여러 Map Task + Reduce Task로 분할
  • YARN → Task를 노드에 배분하고 실행 관리
  • Task 실패 → 다른 노드에서 자동 재실행

 

 

2. 데이터 지역성 ( Data Locality )

  • 데이터가 있는 노드에서 처리 → 네트워크 사용 최소화
  • 최적 스플릿 크기 = HDFS 블록 크기(128MB)
    • 스플릿이 블록 두 개 이상 걸치면 데이터 일부를 네트워크로 가져와야 함 → 속도 저하 ( 네트워크 병목 )

 

3. 맵 결과 처리

  • 맵 출력 → 로컬 디스크에 임시 저장
  • 리듀스 입력 → 모든 맵 결과 병합
  • 리듀스 출력 → HDFS 저장, 첫 복제 자기 노드, 나머지는 외부 노드

 

 

 

 

 

5) 파티셔닝( Partitioning )

  • 리듀스 개수에 따라 맵 결과가 여러 파티션으로 나뉨
  • 같은 키는 항상 같은 파티션 → 같은 리듀스로 전달
  • 사용자 정의 파티셔닝 가능 (기본: 해시 함수)
  • 리듀스 개수를 늘리면 더 작은 파티션 생성 → 병렬 처리 효율 증가

-- 예시 --

Mapper 결과: ("2024",30), ("2025",25), ("2024",28), ("2025",26), ("2026",27)
파티션1 → "2024", "2026"
파티션2 → "2025"

 

 

 

6) 컴바이너 함수

  • Mapper와 Reducer 사이에서 중간 데이터 미리 처리
  • 목적: 데이터 전송량 감소
  • 예시: 최고 기온 계산
    • 맵 출력: (2024, 0), (2024, 10), (2024, 8)
    • 컴바이너 적용 → (2024, 10)만 Reducer로 전달
  • 주의: Reducer 최종 결과 동일 보장 필수
  • 사용 가능: 합/최대/최소 등 결합 가능(associative) 연산

 

 

 

 

7) 분산 맵 리듀스 실행

  • 클러스터 10개 노드 → 전체 처리 시간 6분
  • [ 노드 수 ↑ → 처리 시간 ↓ ] & [ 노드 수 ↓ → 처리 시간 ↑ ]
  • 강점:
    • 대용량 데이터 분산 처리 가능
    • 확장성 뛰어남 → 하드웨어 자원 활용 가능
    • 안정성 → Task 실패 시 자동 재실행

 

 

 

 

1. 맵리듀스 구조: Map(데이터 준비) → Shuffle/Sort → Reduce(결과 계산)
2. 스플릿 크기 = HDFS 블록 크기 → 데이터 지역성 최적
3. 컴바이너 = 중간 결과 최적화 → 데이터 전송량 감소
4. 파티셔닝 → 리듀스 개수/키에 따라 데이터 분배, 병렬 처리 효율 증가
5. YARN → 작업 스케줄링 및 실패 처리 관리