빅데이터 분산 처리의 필요성
📌 들어가며
오늘날 서비스는 매일 수백만 명의 사용자와 상호작용하고, 로그·트랜잭션·센서 데이터가 실시간으로 쏟아진다.
단일 서버로는 이 모든 데이터를 감당하기 어렵다. 그래서 빅데이터 분산 처리 시스템이 등장했다.
⚠️ 단일 서버의 한계
-
용량 한계
- 서버 한 대의 디스크는 수 TB 수준.
- 페타바이트(PB) 단위 데이터는 단일 서버에 담기 힘듦.
-
성능 한계
- CPU·메모리 자원이 고정 → 동시 요청 많아지면 병목 발생.
- 예: 로그 1TB를 한 대 서버로 집계하면 몇 시간~며칠 소요.
-
장애 내성 부족
- 하드디스크/서버 한 대가 죽으면 데이터 전체가 사라질 수 있음.
💡 분산 처리의 아이디어
- 데이터를 여러 대 서버에 나눠 저장하고,
- 연산도 여러 대 서버에서 동시에 수행.
즉,
1대 서버에서 10시간 걸릴 작업
→ 10대 서버에서 병렬 처리하면 1시간에 끝낼 수 있음
🗂️ 분산 시스템에서 해결하는 문제
-
확장성 (Scalability)
- 서버를 더 붙이면 처리량도 비례해서 늘어나야 한다.
-
내결함성 (Fault Tolerance)
- 일부 서버가 죽어도 데이터가 안전하게 유지되어야 한다.
-
저비용 인프라 (Commodity Hardware)
- 값싼 서버 여러 대로도 대규모 데이터 처리 가능해야 한다.
🧰 이를 해결하는 프레임워크
- Hadoop (하둡): 데이터를 블록 단위로 여러 서버에 저장(HDFS), MapReduce로 배치 처리.
- Spark: 메모리 기반 분산 처리, 빠른 분석·스트리밍 지원.
- Kafka: 실시간 로그 스트리밍 파이프라인.
- Data Lake / DW: 원시 데이터 저장 vs 분석용 저장소.
✅ 마무리
분산 처리 시스템은 "대규모 데이터를 안전하고 빠르게 처리하기 위해 등장"했다.
Hadoop과 HDFS 이해하기
📌 Hadoop이란?
Hadoop은 대용량 데이터를 저장·처리하기 위한 오픈소스 프레임워크다.
구성 요소는 크게 세 가지다.
- HDFS (Hadoop Distributed File System) → 분산 저장
- YARN (Yet Another Resource Negotiator) → 자원 관리·스케줄링
- MapReduce → 배치 처리 엔진
👉 이번에는 Hadoop의 핵심, HDFS를 집중적으로 본다.
🗄️ HDFS(Hadoop Distributed File System)의 구조
HDFS는 큰 파일을 블록 단위로 쪼개 여러 서버에 나눠 저장하는 방식이다.
-
NameNode
- 메타데이터 관리 (파일 이름, 경로, 블록 위치)
- 직접 데이터 저장하지 않음
-
DataNode
- 실제 데이터 블록 저장
- 블록을 복제(기본 3개)해서 여러 서버에 분산 배치
📍 즉, NameNode는 “지도”, DataNode는 “창고” 역할.
⚙️ 파일 저장 예시
파일 log.txt (300MB)를 HDFS에 저장한다고 하자.
-
log.txt → 블록1(128MB), 블록2(128MB), 블록3(44MB)
-
HDFS가 블록들을 서버에 자동 분산 배치
- 블록1 → 서버A, 서버B, 서버C
- 블록2 → 서버B, 서버C, 서버D
- 블록3 → 서버A, 서버C, 서버D
-
NameNode는 “파일과 블록·위치 매핑 정보”만 저장
👉 사용자가 log.txt를 요청하면, NameNode에서 위치를 알려주고 클라이언트가 DataNode에서 직접 블록을 가져와 합친다.
💡 HDFS의 특징
-
장애 내성
- 블록을 여러 서버에 복제 → 한 서버가 죽어도 데이터 손실 없음
-
확장성
- 서버(DataNode)를 추가하면 자동으로 저장 공간 확장
-
데이터 지역성
- 연산(MapReduce, Spark)을 데이터가 저장된 서버에서 실행 → 네트워크 전송 최소화
-
저렴한 하드웨어
- 고가 장비 대신 일반 서버 수십~수백 대로 PB 단위 데이터 처리 가능
⚠️ 한계점
- 작은 파일 수억 개 저장에는 비효율적 (메타데이터 폭증)
- 실시간 처리엔 느림 (배치 처리용)
- NameNode가 단일 장애 지점(SPOF) → 최근엔 HA(이중화) 지원
✅ 마무리
HDFS는 하둡의 심장이다.
- 파일을 쪼개서 여러 서버에 나누고
- 블록을 복제해 장애를 대비하며
- 대용량 데이터를 안정적으로 저장할 수 있다.