본문 바로가기
CS 지식/분산시스템과 컴퓨팅

빅데이터 처리와 람다 아키텍처 소개(Hadoop)

by 코딩하는 동현 2025. 4. 2.

클라우드, AI, 빅데이터 시대의 도래

  • 2013년부터 핸드폰 보급률 증가 → 빅데이터 시대 도래
  • 2020년 이후 IoT 보급 → 초연결 사회로 진입
  • 클라우드는 가상화(Virtualization) 기술을 통해 시스템의 유연성과 확장성을 크게 향상시킴
  • AI는 미래 사회의 필수 기반 기술이 됨

 

🔧 AI 시대의 핵심 요소

  1. 컴퓨팅 파워 (GPU, Parallel Processing)
  2. Advanced Algorithm (딥러닝, 머신러닝 등)
  3. Massive Dataset (대규모 데이터셋)

이 3가지 요소가 결합되며, 2017년 이후 본격적인 AI 대중화가 시작됨.


빅데이터의 정의: 3V

빅데이터는 다음의 3V 특성으로 정의된다.

  • Volume (크기): 대규모 데이터, TB → PB → ZB 단위로 확장
  • Variety (다양성): 정형(Structured) vs 비정형(Unstructured) 데이터
  • Velocity (속도): 빠르게 생성되고 빠르게 처리되어야 하는 데이터

💡 데이터 단위 이해

  • KB (10^3), MB (10^6), GB (10^9), TB (10^12), PB (10^15), EB (10^18), ZB (10^21)
  • 2020년 기준: 매일 수십 ZB의 데이터가 생성됨

Structured vs Unstructured Data

🧱 Structured Data

  • 전통적인 데이터베이스(DBMS)에서 사용하는 테이블 형태
  • 예: Oracle, MySQL 등의 관계형 데이터베이스(RDBMS)
  • 쉽게 질의(Query)할 수 있고, 정해진 스키마를 가짐

🌊 Unstructured Data

  • 정해진 형식 없이 생성된 데이터
  • 예: 이미지, 비디오, 오디오, 로그 파일, SNS 글 등
  • 최근 데이터의 대부분은 이 형태로 증가하고 있음
  • Oracle 같은 전통적인 DB는 이런 데이터를 다루기 어려움 → NoSQL, HDFS 등의 도입

데이터의 생성과 저장의 변화

  • 과거: 사람이 만든 데이터(트랜잭션 기반 시스템 중심)
  • 현재: 머신이 만든 데이터 (IoT, 센서, CCTV, 차량, 위성 등)
  • 문제는 저장소 부족이 아니라 저장된 데이터의 분석과 활용

📸 데이터의 생성 예시

  • CCTV: 영상 데이터는 용량이 큼 → 대부분 실시간 확인 후 삭제됨
  • IoT 센서: 수많은 센서가 초당 데이터를 전송함
  • 위성, 병원 장비(X-ray), 웨어러블 헬스 기기 등에서 지속적으로 데이터 생성 중

빅데이터의 3V 심화

1️⃣ Volume (데이터 양)

  • 기업은 수십~수백 TB 수준의 데이터를 보유
  • 개인도 수 TB 정도 데이터를 다룸
  • 2020년 기준 매일 40 ZB 이상의 데이터가 생성됨

2️⃣ Variety (데이터 다양성)

  • 텍스트, 이미지, 오디오, 비디오, 센서 데이터 등 다양한 포맷 존재
  • 데이터 소스도 과거의 중앙 집중형에서 완전 분산형(Fully Distributed) 으로 변화

3️⃣ Velocity (데이터 속도)

  • Batch 처리, Near Real-time 처리, Real-time 스트리밍 처리로 나뉨
  • 데이터가 생성되자마자 분석하고 반응해야 하는 Streaming 처리가 중요해짐

빅데이터 처리 방식: 배치 vs 스트리밍

방식 설명
Batch 데이터를 일정 단위로 모아서 한 번에 처리
Streaming 실시간으로 연속적인 데이터를 처리 (예: 주식 거래, 맥박 감지)
  • 리얼타임 주가 변동, IoT 센서 반응 등은 스트리밍 방식이 필요
  • 배치는 대량 데이터에 대한 통계 및 분석 (예: 수년간의 소비 패턴 분석)

 


Lambda Architecture (람다 아키텍처)

람다 아키텍처는 대규모 데이터를 처리하기 위해 배치 처리실시간 처리를 결합한 아키텍처 구조이다. 데이터의 정밀한 분석 결과와 실시간 응답성을 동시에 달성하기 위해 고안되었다.

🏗 람다 아키텍처 구성

계층 (Layer) 주요 역할 대표 기술
Batch Layer 전체 데이터 저장 및 정밀 분석 Hadoop, MapReduce, Hive, Pig
Speed Layer 최신 실시간 데이터 처리 Kafka, Spark Streaming, Flink
Serving Layer 분석 결과 저장 및 사용자 응답 제공 HBase, Cassandra, Elasticsearch

📌 계층별 상세 설명

1. Batch Layer (배치 계층)

  • 역할: 대량의 데이터를 저장하고 정기적으로 분석
  • 특징: 느리지만 매우 정확한 분석 가능
  • 예시: 지난 3개월 사용자 행동 데이터 기반 인기 상품 분석

2. Speed Layer (속도 계층)

  • 역할: 들어오는 실시간 데이터를 빠르게 처리
  • 특징: 반응성이 빠르며, 최근 데이터에 집중
  • 예시: 현재 접속 중인 사용자의 클릭 패턴 실시간 분석

3. Serving Layer (결과 제공 계층)

  • 역할: 두 계층의 결과를 통합하여 사용자 질의에 응답
  • 특징: 빠른 응답, 조회 최적화된 저장 방식
  • 예시: Elasticsearch를 통해 검색 기반 대시보드 제공

 

💡 시각적 흐름

       [전체 로그 데이터 저장소 - HDFS]
                   │
           [Batch Layer - MapReduce]
                   │
           [Speed Layer - Kafka + Spark]
                   │
        [Serving Layer - HBase, Elastic]
                   │
                [사용자 응답]

 

 

✅ 장단점 요약

구분 설명
장점 정확한 분석(Batch), 실시간 응답(Speed) 모두 가능, 유연한 아키텍처 설계
단점 이중 처리 로직으로 인한 복잡성, 다양한 컴포넌트 관리로 운영 부담

 

🆚 Lambda vs Kappa Architecture

항목 Lambda Architecture Kappa Architecture
계층 구조 Batch + Speed + Serving 단일 스트리밍 계층 중심
처리 방식 이중 파이프라인 단일 스트리밍 처리로 통합
대표 기술 MapReduce, Spark, Storm 등 Kafka, Flink 등
복잡성 높음 상대적으로 단순함

 

🔎 실용 예시

실시간 주식 데이터 분석 시스템

  • Kafka: 거래 데이터를 수신
  • Spark Streaming: 실시간 분석 (예: 급등 종목 탐지)
  • Hadoop MapReduce: 전일 또는 주간 거래량 평균 분석
  • Elasticsearch: 결과를 통합하여 사용자 질의에 응답

 


Big Data Processing Pipeline

  1. 수집 (Collect): 다양한 소스로부터 데이터 수집 (IoT, 앱, 웹 등)
  2. 저장 (Store): 데이터 웨어하우스, NoSQL, HDFS 등 저장소에 저장
  3. 변환 (Transform): 분석하기 쉬운 형태로 가공 (ETL, 전처리)
  4. 분석 (Analyze): 통계, 머신러닝, AI 모델링
  5. 시각화 (Visualize): 그래프, 차트 등으로 결과 표현
  6. 예측/추론 (Predict): 패턴 파악, 이상 탐지, 미래 행동 예측

 


빅데이터 처리 기술과 대표 프레임워크

🗃 저장 기술

기술 설명
HDFS (Hadoop Distributed File System) 대용량 파일을 여러 블록으로 나누어 다수의 노드에 분산 저장
Ceph 객체 기반 분산 파일 시스템, 하둡보다 안정성과 유연성이 높음
SAP HANA 인메모리 기반의 고속 데이터베이스

 

💬 메시징 시스템

기술 설명
Kafka 대규모 실시간 데이터 스트리밍 처리, Pub/Sub 구조
RabbitMQ 메시지 브로커, 다양한 프로토콜 지원, 비교적 간단한 구성

 

데이터 처리 프레임워크

🧩 Hadoop

  • 대표적인 배치 처리 프레임워크
  • 구성 요소:
    • HDFS: 분산 파일 저장
    • MapReduce: 분산 처리 연산 수행
    • YARN: 클러스터 리소스 관리

⚡ Spark

  • 배치와 스트림 처리를 모두 지원하는 인메모리 기반 프레임워크
  • RDD (Resilient Distributed Dataset): Spark의 핵심 개념
  • MapReduce보다 훨씬 빠른 처리 가능

🌪 Storm

  • 실시간 데이터 스트리밍 처리 전용
  • Event 기반, Tuple 단위의 처리
  • Latency가 매우 짧고 빠른 응답 가능

🧠 Flink

  • Spark보다 더 정교한 스트리밍 처리 지원
  • 이벤트 시간 기반 처리(Event Time) 가능
  • 상태 기반 스트리밍 처리가 가능하여, 복잡한 이벤트 처리에 적합

 

빅데이터 프레임워크의 역할 요약

📦 수집 → 저장 → 처리 → 분석 → 활용

수집 Kafka, Flume
저장 HDFS, Ceph, Cassandra
처리 Hadoop, Spark, Storm, Flink
분석 Spark MLlib, TensorFlow
시각화 Kibana, Superset, Tableau
활용 MLOps, Business Intelligence 시스템

 


빅데이터 기반 시스템의 예시 구성도

예: Lambda Architecture 기반 처리 시스템 구성

  1. 데이터 수집: Kafka → 실시간 로그, 센서, 트랜잭션 수집
  2. Batch Storage: HDFS
  3. Batch Processing: Hadoop MapReduce
  4. Stream Processing: Spark Streaming 또는 Flink
  5. Serving Layer: HBase / Cassandra / Elasticsearch
  6. Frontend: 분석 결과 시각화 대시보드

분산 시스템 품질 속성 (Quality Attributes)

속성 설명
Scalability 데이터 증가에 따라 시스템 확장 가능
Fault Tolerance 일부 노드가 고장나도 전체 시스템은 작동 유지
Availability 항상 접근 가능하고 고가용성을 유지함
Maintainability 유지보수와 수정이 용이함
Usability 사용자와 개발자가 쉽게 사용할 수 있음
Performance 처리 속도, 응답 속도 등의 성능 지표 만족

Hadoop 생태계 요약

구성 요소 역할
HDFS 분산 저장
MapReduce 분산 처리
YARN 리소스 관리
HBase 컬럼 기반 NoSQL 저장
Hive SQL 형태로 데이터 조회 가능
Pig 스크립트 기반 데이터 흐름 처리
Sqoop RDB ↔ HDFS 데이터 전송
Zookeeper 분산 환경에서의 동기화와 구성 관리
Oozie 워크플로우 관리

CEP (Complex Event Processing)

CEP는 연속적으로 발생하는 이벤트 스트림을 실시간으로 분석하고, 그 중 의미 있는 패턴이나 이벤트를 탐지하여 즉각적인 반응을 유도하는 기술이다.

🧠 핵심 개념

  • 수많은 이벤트 중에서 의미 있는 이벤트(Complex Event)를 추출
  • 실시간 필터링, 집계, 윈도잉(windowing), 조인(join) 등의 기능 수행
  • 일반적인 쿼리 방식이 아니라 시간 순서조건 조합에 따라 분석 수행

⚙️ 처리 흐름

  1. 이벤트 스트림 수신 (IoT, 센서, 로그 등)
  2. 이벤트 간 패턴 또는 상관관계 분석
  3. 특정 조건이 만족되면 이벤트 생성 및 알림 또는 자동 제어

💡 예시 1: 증권 거래 시스템

  • 실시간으로 거래 이벤트를 수신
  • 특정 종목의 "골든 크로스" (단기 이평선이 장기 이평선을 상향 돌파) 발생 시 자동 매수
  • 활용 도구: Esper, Flink CEP 등

💡 예시 2: 스마트홈 보안 시스템

조건: "온도가 30도를 초과하고, 1분 이내 출입 감지 발생 시" 반응: 에어컨 자동 가동 + 보안 강화 모드로 전환

🚀 대표 오픈소스 도구

도구 설명
Esper Java 기반의 CEP 엔진, SQL 유사 언어 지원
Apache Flink CEP Flink 내에 내장된 CEP 기능, 이벤트 시간 기반 패턴 매칭
Drools Fusion 규칙 기반 이벤트 처리 엔진 (BRMS 연동)

📊 주요 활용 분야

  • 증권/금융: 고빈도 트레이딩, 패턴 감지
  • IoT: 센서 이벤트 이상 징후 탐지
  • 헬스케어: 웨어러블 기기 상태 모니터링
  • 사이버 보안: 보안 로그에서 이상 이벤트 감지
  • 실시간 추천: 사용자 행동 기반 실시간 추천

 


빅데이터 저장소 시스템 비교 (HDFS vs Ceph)

항목 HDFS Ceph
구조 Master-Slave 구조 (NameNode, DataNode) 완전 분산 구조 (No Single Point of Failure)
확장성 수평 확장 가능하나 NameNode는 병목 가능성 있음 완전한 수평 확장 가능
복제 방식 3중 복제 기본 CRUSH 알고리즘 기반 복제
장애 대응 NameNode 복제 및 Zookeeper로 대응 자체 알고리즘으로 장애 시 자동 복구
메타데이터 관리 NameNode가 전담 모든 노드가 분산 저장
사용 예시 Hadoop 기반 배치 처리 환경 OpenStack, Object Storage, 클라우드 환경
설치 및 구성 비교적 단순 상대적으로 복잡

 


마이크로서비스 아키텍처(MSA)에서의 데이터 처리

  • 각 서비스는 독립된 데이터 저장소를 사용
  • 데이터 통합보다는 API 기반 공유에 중점
  • 대규모 로그 분석 및 사용자 행동 분석에 빅데이터 플랫폼 접목

 


Hadoop YARN과 리소스 관리 방식

YARN (Yet Another Resource Negotiator) 는 Hadoop 2.x 이후에 도입된 클러스터 리소스 관리 플랫폼이다.

주요 구성 요소

구성 요소 역할 설명
ResourceManager 전체 클러스터 자원 관리, 노드 상태 모니터링
NodeManager 각 노드에서 자원 상태 보고 및 컨테이너 관리
ApplicationMaster 애플리케이션 단위의 리소스 요청 및 작업 관리
Container 실제 작업이 실행되는 자원 단위 (CPU, 메모리 등)

처리 흐름

  1. 사용자가 작업 제출 → ResourceManager
  2. ResourceManager는 ApplicationMaster를 실행할 노드 지정
  3. ApplicationMaster는 Container 할당 요청
  4. NodeManager가 Container 생성 및 작업 수행

HDFS (Hadoop Distributed File System) 구조 및 장애 대응

HDFS는 Hadoop의 핵심 구성요소로, 대용량 데이터를 분산 환경에서 효율적으로 저장하고 관리하기 위한 분산 파일 시스템이다.

🏗 기본 구성 요소

구성 요소 역할
NameNode 메타데이터 관리 (파일 이름, 블록 위치, 접근 권한 등)
DataNode 실제 데이터 블록을 저장하고, NameNode에 상태 보고
Secondary NameNode 주기적으로 메타데이터 체크포인트 생성 (백업 X, 보조 역할)

 

🧱 데이터 저장 방식

  • 파일은 블록(Block) 단위로 나뉘어 저장됨 (기본 128MB)
  • 각 블록은 기본적으로 3중 복제(replication) 되어 서로 다른 노드에 저장됨
  • 데이터는 "쓰기 한 번, 여러 번 읽기" 패턴에 최적화됨

 

🔄 데이터 복제 및 전략

항목 설명
복제 수 기본 3개 (configurable)
복제 위치 Rack-aware 알고리즘 적용: 동일 랙 내 1개, 다른 랙에 2개
장점 장애 대비, 네트워크 병목 최소화, 데이터 안정성 확보

 

⚠️ 장애 대응 메커니즘

  1. NameNode 장애
    • HA 구성 필수 (Active-Standby 또는 Zookeeper 기반 Failover)
    • 메타데이터 이중화 필요: JournalNode 또는 Quorum Journal Manager 사용
  2. DataNode 장애
    • Heartbeat & Block Report 미수신 시 장애로 간주
    • NameNode가 자동으로 블록 복제 요청 (다른 노드에서 복구)
    • 데이터 손실 없는 자동 복구 지원
  3. Mapper/Reducer 실패
    • YARN이 실패 Task를 감지하고 다른 노드에 재시작

 

💬 장애 상황 예시

  • 노드 A가 꺼짐 → A에 있던 블록은 사라짐
  • NameNode가 인지 → 다른 노드에 해당 블록 복제
  • 복구 후 블록 수가 다시 3개가 되도록 유지

 

🔐 데이터 신뢰성 확보 요소

요소 설명
Replication 데이터 복제를 통한 장애 대응
Heartbeat DataNode의 생존 상태 모니터링
Failover Mechanism NameNode 장애 시 자동 전환
Block Integrity Check 주기적인 블록 손상 검사 및 복구

 

📌 핵심 요약

  • 데이터는 절대 이동하지 않는다, 대신 코드가 이동하여 처리됨
  • 블록 단위 복제HA 구성으로 장애에 강한 시스템
  • 전체 아키텍처의 신뢰성과 확장성을 확보하는 핵심 인프라

분산 시스템 설계 시 고려할 점

  1. 데이터 분산 저장 구조
    • 파일 단위 or 블록 단위
    • 복제 전략
  2. 컴퓨팅 리소스 분산 구조
    • 노드 간 병렬 처리
    • Task Scheduler 구조
  3. 리소스 및 장애 관리
    • 마스터-슬레이브 or 완전 분산
    • YARN, Kubernetes 등 활용
  4. 프레임워크 구조화
    • 사용자 코드는 최소한으로 유지 (Framework-Component 구조)
    • 예: 사용자 컴포넌트가 들어가는 MapReduce 프레임워크

 

설계 방향

  1. 데이터 저장 구조
    • HDFS 기반 분산 파일 시스템
    • 블록 단위로 데이터 저장 및 3중 복제
    • NameNode는 메타데이터만 관리 (파일명, 위치 정보 등)
  2. 컴퓨팅 구조
    • MapReduce 기반 배치 처리 프레임워크 사용
    • 코드가 데이터를 찾아가는 방식 (code-to-data)
    • YARN을 이용해 리소스 스케줄링 및 실행 관리
  3. 장애 대응
    • NameNode의 HA 구성 (Active-Standby)
    • DataNode는 Heartbeat로 상태 체크, 복제 손실 시 자동 보완
  4. 프레임워크 설계
    • 사용자 컴포넌트를 넣는 방식의 프레임워크 구조
    • 사용자는 분석 코드만 구현하면 됨
    • 분산 실행 및 데이터 분할/병합은 시스템이 자동 수행

프레임워크의 컴포넌트 구조

구조도 요약

[ 사용자 코드 ] → [ Framework Container ] → [ Hadoop Cluster (HDFS + YARN) ]

주요 흐름

  1. 사용자가 Mapper, Reducer 인터페이스 구현
  2. 시스템은 이를 적절한 노드에 배치
  3. 각 노드는 데이터를 로컬에서 처리 (Map)
  4. 중간 결과를 모아 최종 처리 (Reduce)
  5. 결과를 HDFS에 저장

데이터 이동 vs 코드 이동

방식 설명 장점
데이터 이동 중앙 서버에서 전체 데이터를 가져와 처리 단순한 로직 가능
코드 이동 데이터가 있는 노드로 코드 전송 빠르고 효율적인 분산 처리 가능

→ Hadoop은 코드 이동 방식을 채택


시스템 레이어 구분

레이어 설명
Storage Layer HDFS, 복제 전략, NameNode 관리
Resource Layer YARN, 노드 상태 감시, 스케줄링
Processing Layer MapReduce, Spark 등 프레임워크
Application Layer 사용자 작업 (예: 최대값 계산, AI 훈련 등)

마스터 노드 설계 고려사항

  • 메타데이터만 저장하므로 상대적으로 가벼움
  • HA 구성 필수
    • Active-Passive 형태 또는 Zookeeper 기반 자동 전환
  • 장애 발생 시 빠르게 복구 가능하도록 메타정보 백업

빅데이터 처리를 위한 실제 동작 흐름 예시 (최댓값 찾기)

예시 시나리오: 전체 데이터에서 최댓값 찾기

목표: 여러 노드에 분산 저장된 데이터에서 전체 최댓값을 빠르게 구함

 

Step 1: 사용자 코드 작성

  • 사용자(개발자)는 Mapper, Reducer 형태의 코드를 작성함
// Mapper: 각 데이터 블록에서 최댓값 찾기
public class MaxMapper extends Mapper<LongWritable, Text, NullWritable, IntWritable> {
    public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        int number = Integer.parseInt(value.toString());
        context.write(NullWritable.get(), new IntWritable(number));
    }
}

// Reducer: 전체 중 최댓값 구하기
public class MaxReducer extends Reducer<NullWritable, IntWritable, NullWritable, IntWritable> {
    public void reduce(NullWritable key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        int max = Integer.MIN_VALUE;
        for (IntWritable val : values) {
            if (val.get() > max) max = val.get();
        }
        context.write(NullWritable.get(), new IntWritable(max));
    }
}

 

 

Step 2: 분산 실행 흐름

  1. Job 요청: 사용자가 작성한 MapReduce 작업을 Hadoop 클러스터에 제출
  2. YARN 스케줄링: YARN이 클러스터 내 자원을 점검하고 실행 노드 할당
  3. Mapper 실행: 각 DataNode는 자신이 저장한 블록을 기반으로 MaxMapper 실행
    • 데이터 이동 없이 로컬에서 처리
    • 블록마다 중간 최댓값 계산
  4. Reducer 실행: 모든 Mapper의 결과가 한 곳으로 모임
    • MaxReducer가 전체 최댓값 산출
  5. 결과 저장: HDFS에 최종 결과 저장

 

Step 3: 장애 대비 구조

  • Mapper 장애 발생: YARN이 해당 Task를 다른 노드에서 재시작
  • Reducer 장애 발생: Reducer 또한 재시작 가능
  • NameNode 장애 대비: Active-Standby 구성으로 자동 전환
  • 데이터 손실 방지: 각 블록은 3중 복제, 하나의 노드 장애 시에도 데이터 유지

 


Hadoop을 통한 분산 처리의 효과

항목 Hadoop 적용 전 Hadoop 적용 후
처리 시간 단일 노드에 의존 → 느림 병렬 분산 처리 → 빠름
장애 발생 시 전체 작업 실패 장애 노드만 재시작
자원 활용 단일 CPU, RAM 클러스터 자원 전체
사용자 복잡도 모든 분산 처리 직접 구현 프레임워크가 분산 처리 담당

 

 

전체 아키텍처 요약

[ 사용자 Job ]
    ↓
[YARN 스케줄러]
    ↓
[Mapper 실행 - 각 DataNode]
    ↓
[Reducer 실행]
    ↓
[HDFS 결과 저장]

  • 코드가 데이터로 이동
  • YARN이 실행 제어
  • 중간 실패 시 자동 복구
  • 고가용성 보장

 

다른 예: YouTube 데이터 흐름 (실시간 및 배치 혼합)

  • 사용자들이 업로드한 영상 → KafkaHDFS 저장
  • 최근 업로드 영상에 대한 분석 → Spark Streaming
  • 과거 전체 데이터 기반 추천 알고리즘 학습 → MapReduce
  • 사용자에게 추천 결과 제공 → Elasticsearch
반응형

댓글