Data Lake & Big Data
Schema-on-Read, Zone 구조, Hadoop/Spark, Data Lakehouse
📚 시리즈 네비게이션
| 이전 | 현재 | 다음 |
|---|---|---|
| DW System | Data Lake | ETL & Pipeline |
→ 시리즈 목차
🎯 Data Lake란?
Data Lake: 정제되지 않은 원시 데이터를 원본 그대로 저장하는 중앙 저장소
핵심 특징:
- 원본 데이터 그대로 저장 (Schema-on-Read)
- 정형/반정형/비정형 데이터 모두 수용
- 저렴한 스토리지에 대용량 저장
- 나중에 필요할 때 변환/분석
🆚 DW vs Data Lake
| 구분 | Data Warehouse | Data Lake |
|---|---|---|
| 데이터 형태 | 정형 (구조화) | 정형/반정형/비정형 |
| 스키마 | Schema-on-Write | Schema-on-Read |
| 처리 시점 | 적재 전 변환 (ETL) | 사용 시 변환 (ELT) |
| 저장 비용 | 높음 | 낮음 |
| 사용자 | 비즈니스 분석가 | 데이터 엔지니어, 과학자 |
| 쿼리 성능 | 빠름 (최적화됨) | 상대적으로 느림 |
| 데이터 품질 | 높음 (정제됨) | 다양함 (원본) |
flowchart LR subgraph DW["Data Warehouse"] DW1["정제된 데이터<br/>┌─┬─┬─┐<br/>│A│B│C│<br/>├─┼─┼─┤<br/>│1│2│3│<br/>└─┴─┴─┘"] DW2["'분석 준비됨'"] end subgraph DL["Data Lake"] DL1["원시 데이터<br/>JSON, CSV,<br/>이미지, 로그"] DL2["'나중에 정제'"] end
📊 Schema-on-Write vs Schema-on-Read
| 구분 | Schema-on-Write (DW) | Schema-on-Read (Data Lake) |
|---|---|---|
| 스키마 정의 | 저장 전 | 조회 시 |
| 유연성 | 낮음 | 높음 |
| 데이터 품질 | 높음 | 다양함 |
| 저장 속도 | 느림 (변환) | 빠름 (원본 저장) |
| 쿼리 속도 | 빠름 | 느림 |
🏗️ Data Lake 아키텍처
Zone 구조
Data Lake는 보통 여러 영역(Zone)으로 나뉨.
flowchart TB subgraph Zones["Data Lake Zones"] Raw["[1] Raw Zone (Landing Zone)<br/>원천 데이터 원본 그대로<br/>변환 없음, 감사 목적"] Cleansed["[2] Cleansed Zone (Curated Zone)<br/>정제/표준화된 데이터<br/>중복 제거, 형식 통일"] Trusted["[3] Trusted Zone (Analytics Zone)<br/>분석 가능한 상태<br/>비즈니스 로직 적용<br/>DW/Data Mart로 이동 가능"] Raw --> Cleansed --> Trusted end
🔧 Big Data 기술 스택
저장 (Storage)
| 기술 | 설명 |
|---|---|
| HDFS | Hadoop Distributed File System, 분산 파일 시스템 |
| Amazon S3 | 클라우드 오브젝트 스토리지 |
| Azure Data Lake Storage | Azure 데이터 레이크 스토리지 |
| Google Cloud Storage | GCP 오브젝트 스토리지 |
처리 (Processing)
| 기술 | 유형 | 설명 |
|---|---|---|
| Hadoop MapReduce | 배치 | 대용량 배치 처리 (레거시) |
| Apache Spark | 배치/스트림 | 인메모리 처리, 빠름 |
| Apache Flink | 스트림 | 실시간 스트림 처리 |
| Apache Kafka | 스트림 | 메시지 큐, 이벤트 스트리밍 |
쿼리 (Query)
| 기술 | 설명 |
|---|---|
| Apache Hive | SQL on Hadoop, 배치 쿼리 |
| Presto/Trino | 분산 SQL 엔진, 빠른 쿼리 |
| Apache Drill | 스키마 없는 쿼리 |
| Amazon Athena | S3 위 서버리스 SQL |
🐘 Hadoop 에코시스템
flowchart TB subgraph Hadoop["Hadoop Ecosystem"] subgraph Ingestion["수집/쿼리"] Hive["Hive (SQL)"] Pig["Pig (Script)"] Sqoop["Sqoop (RDB연동)"] Flume["Flume (로그)"] end Processing["MapReduce / Spark<br/>(분산 처리 엔진)"] YARN["YARN<br/>(리소스 관리자)"] HDFS["HDFS<br/>(분산 파일 시스템)"] Ingestion --> Processing --> YARN --> HDFS end
⚡ Apache Spark
현재 가장 많이 쓰이는 빅데이터 처리 엔진임.
특징:
- 인메모리 처리 → MapReduce보다 최대 100배 빠름
- 배치 + 스트림 처리 통합
- Python, Scala, Java, R, SQL 지원
구성 요소:
| 컴포넌트 | 용도 |
|---|---|
| Spark Core | 기본 엔진, RDD |
| Spark SQL | 구조화된 데이터 처리 |
| Spark Streaming | 실시간 스트림 처리 |
| MLlib | 머신러닝 라이브러리 |
| GraphX | 그래프 처리 |
# PySpark 예시
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("example").getOrCreate()
# CSV 읽기
df = spark.read.csv("s3://bucket/data.csv", header=True)
# 변환
result = df.filter(df.age > 30).groupBy("department").count()
# 저장
result.write.parquet("s3://bucket/output/")🏢 Data Lakehouse
Data Lakehouse: Data Lake + Data Warehouse 장점 결합
| 특징 | 설명 |
|---|---|
| ACID 지원 | Data Lake 위에서 트랜잭션 |
| 스키마 관리 | 메타데이터 레이어 |
| 성능 최적화 | 인덱싱, 캐싱 |
| 통합 접근 | BI 도구에서 직접 쿼리 |
주요 기술:
| 기술 | 설명 |
|---|---|
| Delta Lake | Databricks, Spark 기반 |
| Apache Iceberg | Netflix 오픈소스 |
| Apache Hudi | Uber 오픈소스 |
flowchart TB subgraph Lakehouse["Data Lakehouse"] BI["BI / Analytics / ML"] Meta["Delta Lake / Iceberg / Hudi<br/>(ACID, Schema, Indexing)<br/>메타데이터 레이어"] Storage["Object Storage (S3, ADLS, GCS)<br/>Parquet, ORC 파일<br/>저장소"] BI --> Meta --> Storage end
☁️ 클라우드 Data Lake 서비스
| 클라우드 | 서비스 | 설명 |
|---|---|---|
| AWS | S3 + Athena + Glue | S3 기반, 서버리스 쿼리 |
| Azure | ADLS + Synapse | 통합 분석 서비스 |
| GCP | GCS + BigQuery | 서버리스 DW |
| Databricks | Multi-cloud | Spark 기반 통합 플랫폼 |