Home Hadoop Overview
Post
Cancel

Hadoop Overview

Hadoop

목차


Hadoop의 역할

Hadoop은 수백 테라바이트의 대규모 데이터를 여러 서버에 분산 저장하고 처리하기 위한 오픈소스 생태계다. Google의 GFS와 MapReduce 논문에서 영감을 받아 설계되었다.

1
2
3
4
5
6
7
8
9
10
11
대용량 데이터
    ↓
HDFS (분산 저장)
    ├─ 데이터 1 (서버 A)
    ├─ 데이터 2 (서버 B)
    └─ 데이터 3 (서버 C)
    ↓
MapReduce (분산 처리)
    ├─ Map tasks (병렬)
    ├─ Shuffle (정렬, 그룹화)
    └─ Reduce tasks (집계)

HDFS

“HDFS는 왜 파일을 block으로 나누는가?”

HDFS는 파일을 block(기본 128MB 또는 256MB)으로 나눠서 여러 서버에 분산 저장함으로써 병렬 처리와 확장성을 확보한다.**

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
문제 (전체 저장):
1TB 파일을 1개 서버에만 저장
- 그 서버에서만 처리 가능 (병목)
- 확장 불가능

해결 (block으로 분산):
1TB 파일 → 4개 block (각 256MB)
Block 1 → Server A
Block 2 → Server B
Block 3 → Server C
Block 4 → Server A (복제)

장점:
✓ 병렬 처리 (4개 서버에서 동시 처리)
✓ 복제 (장애 대응)
✓ 스케일 아웃 (서버 추가)

HDFS 아키텍처

1
2
3
4
5
6
7
8
9
NameNode (마스터)
├─ 파일 메타데이터 관리
├─ 파일 위치 정보
└─ 블록 복제 관리

DataNode (워커)
├─ 실제 데이터 저장
├─ 블록 보고
└─ 하트비트 전송

Block 복제

1
2
3
4
5
6
7
8
9
Replication Factor: 3 (기본)
각 block을 3개 복제

Block 1:
├─ Server A (원본)
├─ Server B (복제 1)
└─ Server C (복제 2)

Server A 장애 → 여전히 2개 복사본 있음

MapReduce

“MapReduce는 어떤 처리 모델인가?”

MapReduce는 대규모 데이터를 병렬로 처리하는 프로그래밍 모델로, Map과 Reduce 두 단계로 구성된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Map (분산):
- 각 block마다 병렬로 map task 실행
- 입력 데이터를 key-value 쌍으로 변환

Example (단어 수 세기):
Input: ["hello world", "hello hadoop"]
Map output: [("hello", 1), ("world", 1), ("hello", 1), ("hadoop", 1)]

Shuffle (정렬, 그룹화):
같은 key끼리 묶음
("hello", [1, 1])
("world", [1])
("hadoop", [1])

Reduce (집계):
각 key별로 reduce task 실행
("hello", 2)
("world", 1)
("hadoop", 1)

Map-Reduce 코드

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
# Hadoop Streaming (Python)

# mapper.py
import sys

for line in sys.stdin:
    words = line.strip().split()
    for word in words:
        print(f"{word}\t1")

# reducer.py
import sys

current_word = None
count = 0

for line in sys.stdin:
    word, cnt = line.strip().split("\t")
    
    if word == current_word:
        count += int(cnt)
    else:
        if current_word:
            print(f"{current_word}\t{count}")
        current_word = word
        count = int(cnt)

if current_word:
    print(f"{current_word}\t{count}")

YARN

YARN (Yet Another Resource Negotiator)

YARN은 Hadoop 클러스터의 자원(CPU, 메모리)을 관리하고 여러 애플리케이션을 스케줄하는 리소스 매니저다.

1
2
3
4
5
6
7
8
9
YARN 이전 (고정 역할):
- TaskTracker: map/reduce만 실행

YARN 이후 (유연한 역할):
- NodeManager: 모든 종류의 task 실행
- MapReduce
- Spark
- Hive
- Presto

Data Locality

“data locality는 왜 중요했는가?”

Data Locality는 “데이터가 있는 곳에서 처리”하는 원칙으로, 네트워크 비용을 절감한다.**

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Data Locality 없이 (비효율):
Server A의 data
    ↓ (네트워크 전송)
Server B에서 처리
    ↓ (결과 전송)
→ 네트워크 대역폭 낭비

Data Locality (효율):
Server A의 data
    ↓ (같은 서버)
Server A에서 처리
    ↓ (로컬 저장)
→ 네트워크 불필요

Hadoop의 전략:
1. Rack locality: 같은 랙의 서버 선택
2. Node locality: 같은 노드 선택 (최고 우선)
3. Off-rack: 다른 랙 (마지막 수단)

Hadoop vs 현대 기술

“Hadoop은 현대 데이터 플랫폼에서 어떤 위치인가?”

Hadoop은 여전히 유효하지만, Spark, Cloud Storage와 함께 평가해야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Hadoop (2006-2016):
✓ 장점: 오픈소스, 강력한 분산 처리
✗ 단점: 느림 (Map → Shuffle → Reduce 3단계), 운영 복잡

Spark (2010-):
✓ 장점: 빠름 (메모리 기반), SQL 지원, 다양한 API
✓ 같은 YARN 위에서 실행 가능
✗ 단점: 메모리 사용 많음

Cloud Storage + Serverless (2015-):
✓ 장점: 관리 부담 없음, 저렴, 스케일 자유로움
✓ 예: S3 + Spark + BigQuery
✗ 단점: vendor lock-in

현재 추세:
- Hadoop HDFS: 감소 중 (Cloud Storage로 이전)
- Spark: 계속 성장 (Hadoop과 독립적으로)
- YARN: 레거시 (Kubernetes로 교체)

선택 기준

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Hadoop MapReduce:
- 매우 큰 배치 (100TB+)
- 온프레미스
- 기존 Hadoop 투자

Spark:
- 대부분의 빅데이터 처리
- 빠른 개발 필요
- 반복 처리

Cloud 서비스:
- 관리 부담 최소화
- 비용 최적화
- 스케일링 자유도

정리

개념설명
HDFS분산 파일 시스템 (block 기반)
MapReduceMap + Shuffle + Reduce 처리 모델
YARN리소스 관리 및 스케줄러
Data Locality데이터 위치에서 처리

This post is licensed under CC BY 4.0 by the author.