
Apache Spark = 대량의 데이터를 빠르게 처리하기 위한 오픈소스 분산 처리 프레임워크
일반 컴퓨터 1대로 1억 건의 데이터를 분석하면 몇 시간이 걸릴 수 있습니다. Spark는 이 데이터를 여러 컴퓨터(노드)에 나눠서 동시에(병렬로) 처리합니다. 마치 혼자 이삿짐을 나르는 것과 10명이 함께 나르는 것의 차이입니다.
| 기능 | 설명 |
|---|---|
| Batch Processing | 대량의 데이터를 한꺼번에 처리 (예: 매일 밤 하루치 데이터 정산) |
| Interactive SQL | SQL 문으로 데이터를 즉시 조회 |
| Real-time Processing | 실시간으로 들어오는 데이터를 즉각 처리 (예: 실시간 주식 분석) |
| Machine Learning | 머신러닝 모델 학습 |
| Deep Learning | 딥러닝 모델 학습 |
| Graph Processing | 관계 데이터(SNS 친구관계, 네트워크 등) 분석 |
[Spark SQL] [Spark MLlib] [Spark Streaming] [GraphX]
└──────────────┴──────────────┴───────────────┘
Spark Core Engine
┌──────────────┬──────────────┬───────────────┐
[Yarn] [Mesos] [Standalone Scheduler]
3가지 핵심 강점:
속도 — 메모리(RAM) 내에서 데이터를 처리하기 때문에 기존 Hadoop 대비 최대 100배 빠름
커뮤니티 — 1,000명 이상의 기여자를 가진 가장 큰 오픈소스 빅데이터 프로젝트
다양한 언어 지원 — Scala, Java, Python, Spark SQL, GraphX, Streaming, MLlib 모두 지원
Spark SQL = 구조화된 데이터를 처리하는 분산 SQL 쿼리 엔진
Structured Streaming = 실시간 데이터 스트림을 처리하는 엔진
GraphX = 그래프(연결 관계) 데이터를 분석하는 API
Azure Databricks = Microsoft Azure + Databricks의 합작 서비스. Apache Spark를 클라우드에서 쉽게 쓸 수 있게 해주는 플랫폼
Spark를 직접 설치하고 운영하는 것은 매우 복잡합니다. Azure Databricks는 이 복잡한 과정을 GUI(그래픽 인터페이스)로 단순화해줍니다. 마치 서버를 직접 구축하는 것과 클라우드 서비스를 쓰는 차이입니다.
| Databricks가 제공하는 것 | Microsoft가 제공하는 것 |
|---|---|
| Apache Spark 개발자와 협업하여 설계된 플랫폼 | 엔터프라이즈급 Azure 보안 (AD, SLA) |
| 원클릭 설정 및 간소화된 워크플로우 | Azure 서비스와의 네이티브 통합 (Power BI, Cosmos DB 등) |
| 다양한 관련자들이 협업할 수 있는 인터랙티브 Workspace | - |
벤치마크 결과:
| 비교 대상 | 결과 |
|---|---|
| Databricks vs 일반 Apache Spark | 전체 쿼리 수행 시간 기준 약 5배 빠름, Geometric 평균 약 4배 빠름 |
| Databricks vs Presto | Richer ANSI SQL 지원으로 약 8배 빠름 |
| Databricks vs Apache Impala (온프레미스) | CPU 효율 기준 약 3배 효율적 |
데이터 파이프라인의 각 단계:
데이터 수집(Ingest) → 저장(Store) → 준비/학습(Prep & Train) → 모델/서빙(Model & Serve) → 인텔리전스(Intelligence)
3가지 주요 활용 패턴:
모던 빅데이터 웨어하우스
빅데이터 심화 분석
빅데이터 실시간 분석
여러 사람이 함께 작업하는 통합 환경
| 기능 | 설명 |
|---|---|
| 빠른 시작 | 클릭 한 번으로 새 Spark 환경 구성 |
| 대화형 검증 | Python, R, Scala, SQL 등 다양한 언어로 노트북에서 즉시 실행 및 검증 |
| 협업 | GitHub, Bitbucket 연동 + 실시간으로 같은 노트북 공동 작업 |
| 시각화 | 클릭만으로 다양한 차트 생성, matplotlib/ggplot/D3 같은 고급 라이브러리도 지원 |
| 대시보드 | Power BI와 결합해 인사이트를 공유 |
자동화된 작업 실행 및 파이프라인 관리
| 기능 | 설명 |
|---|---|
| Job Scheduler | 특정 스케줄(매일 새벽 3시 등)에 자동으로 작업 실행 |
| Notebook Workflows | 노트북들을 연결해 다단계 파이프라인 구성 |
| Job으로 Notebook 실행 | API 호출이나 클릭으로 기존 Spark Job 실행 |
| Notifications & Logs | Alert 설정 및 감사 로그로 모니터링 및 문제 해결 |
| Azure 서비스 통합 | SQL DW, Cosmos DB, Data Lake Store, Blob Storage, Event Hub와 네이티브 통합 |
성능을 극대화한 맞춤형 Spark 실행 환경
| 기능 | 설명 |
|---|---|
| 최적화된 I/O | Databricks I/O Module(DBIO)로 클라우드 환경에서 Spark 처리 속도 대폭 향상 |
| 완전 관리형 플랫폼 | Azure에서 전적으로 관리 → 빅데이터/ML의 복잡성 제거 |
| Serverless Infrastructure | 신뢰도 확보 + 비용 효율 + 운영 복잡성 제거 |
| 무한 확장 | 전 세계적으로 제한 없이 사용 가능 |
Azure Databricks는 5가지 핵심 요소로 구성됩니다:
Azure Databricks
├── Clusters (클러스터)
├── Workspace (작업공간)
├── Jobs (작업)
├── Libraries (라이브러리)
└── Notebooks (노트북)
클러스터 아키텍처:
Driver Node (SparkContext)
│
Cluster Manager
├── Worker Node (Cache + Task)
├── Worker Node (Cache + Task)
└── Worker Node (Cache + Task)
모두 데이터 소스(HDFS, SQL, NoSQL...)와 연결
Azure Databricks는 Azure Active Directory(AAD)와 완전히 통합되어 보안 관리
Delta = Apache Spark 기반의 차세대 통합 분석 엔진
| 기능 | 설명 |
|---|---|
| ACID Transaction | 일치하지 않는 데이터를 허용하지 않는 Serializable isolation Level 제공 |
| Efficient Upserts | 지연된 데이터에 대한 세분화된 update 및 record 변경 |
| 고처리량 스트리밍 입수 | 대용량 데이터를 직접 query 테이블로 수집 |
| 최적화 Data Layout | Query 패턴에 맞는 데이터 레이아웃을 자동 선택/관리 |
| Schema Enforcement | Ingestion 중 자동으로 Bad record를 정리해 Schema 일관성 유지 |
| Data Versioning | 데이터 버전 관리로 이전 데이터 복구 및 rollback 용이 |
| 수행 Engine 최적화 | 중첩 데이터 타입, 고순서 함수, Range & Skew Join 최적화 |
Databricks CLI
├── Workspace CLI (노트북/폴더 관리)
└── DBFS CLI (Databricks 파일 시스템 관리)
Databricks REST API
├── Cluster API (클러스터 생성/수정/삭제)
├── DBFS API (파일 시스템 상호작용)
├── Groups API (사용자 그룹 관리)
├── Instance Profile API (인스턴스 추가/삭제)
├── Job API (작업 생성/수정/삭제)
├── Library API (라이브러리 관리)
└── Workspace API (노트북/폴더 목록/import/export/삭제)
3가지 보안 기반:
Azure Databricks는 다음 서비스와 네이티브 통합:
Azure Portal에서 다음 정보로 Databricks 작업 영역 생성:
| 항목 | 값 |
|---|---|
| 구독 | Azure 구독 선택 |
| 리소스 그룹 | 3dtXXX-databricks-group |
| 작업 공간 이름 | 3dtXXX-databricks |
| 지역 | 강사 안내 |
| 가격 등급 | 프리미엄(+ 역할 기반 액세스 제어) |
| 관리되는 리소스 그룹 | 3dtXXX-databricks-group-managed |
XXX는 본인의 번호로 대체
클러스터 = 코드를 실행하는 컴퓨팅 엔진
실습에서는 단일 노드 클러스터 생성 (리소스 최소화 목적)
주요 설정:
매직 커맨드 %를 사용해 하나의 노트북에서 여러 언어 혼용 가능:
%python
print("Hello Python!")
%scala
println("Hello Scala")
%r
print("Hello R!", quote=FALSE)
%sql
SELECT * FROM myTable
%sh
ps | grep 'java'
%run "./Include/notebook2"
노트북에서 코드를 문서화하거나 설명할 때 Markdown 사용:
# 제목 1
## 제목 2
### 제목 3
**굵게**
*기울임*
~~취소선~~
- 항목 1
- 항목 2
1. 첫 번째
2. 두 번째
[링크 텍스트](https://www.google.com)

| 개념 | 설명 |
|---|---|
| Workspace | Notebook, 라이브러리, 실험을 관리하는 사용자 인터페이스. 폴더로 정리하고 팀과 공유 가능 |
| Notebook | 실행 가능한 코드 + 시각화 + 설명 텍스트를 포함하는 대화형 문서. Python/R/Scala/SQL 지원 |
| Cluster | Azure Databricks의 계산 엔진. 필요에 따라 생성·크기 조정 가능. 드라이버 + 워커 노드로 구성 |
| Job | 자동화된 작업을 예약하고 실행하는 메커니즘. 스케줄 트리거 또는 이벤트 응답으로 실행 |
| Databricks Runtime | Apache Spark의 성능 최적화 버전. 머신 러닝, 그래프 처리, 유전체학 최적화 포함 |
| Delta Lake | 데이터 레이크에 안정성과 확장성을 제공하는 오픈소스 스토리지 계층. ACID 트랜잭션 지원 |
| Databricks SQL | Databricks 내의 데이터에 SQL 쿼리를 실행. SQL 편집기 + 대시보드 + 자동 시각화 도구 포함 |
| MLflow | 엔드투엔드 머신 러닝 수명 주기를 관리하는 오픈소스 플랫폼. 실험 추적·모델 관리·배포 |
Azure Databricks는 크게 Control Plane과 Data Plane으로 나뉩니다:
[대화형 사용자] ←→ Control Plane ←→ Data Plane
[API 호출] ←→ - 웹 앱 - 클러스터 (탄력적 컴퓨팅)
- MosaicAI - SQL 웨어하우스
- 워크플로우 - 저장소 (S3, ADLS, GCS)
- Git 폴더 - Delta Lake
- 노트북
- DBSQL
[Unity Catalog]
- 메타스토어
- 액세스 제어
- 워크스페이스 관리
Control Plane: Databricks가 관리하는 서비스 영역 (웹 UI, 설정, 인증 등)
Data Plane: 실제 데이터가 처리되고 저장되는 영역 (클러스터, 스토리지)
| 런타임 | 설명 |
|---|---|
| 표준 런타임 | Apache Spark와 여러 구성 요소를 통합한 빅데이터 분석 환경 |
| 머신 러닝 런타임 | TensorFlow, Keras, PyTorch, XGBoost 등 ML 라이브러리 추가 포함 |
| 종류 | 설명 |
|---|---|
| SQL 웨어하우스 | SQL BI 워크로드 최적화를 위해 특별 설계. 내장 최적화 기능 |
| Databricks Photon | 위 모두를 강화하는 네이티브 벡터화 실행 엔진 |
서버리스 = 서버를 직접 관리하지 않아도 되는 방식
기존 방식과의 차이:
| 이점 | 상세 내용 |
|---|---|
| 더 높은 사용자 생산성 | 클러스터 시작 대기 없이 쿼리 즉시 시작 / 즉각적인 자동 확장으로 동시 사용자 증가 지원 |
| 관리 필요 없음 | 설정 없음 / 성능 튜닝 없음 / 용량 관리 없음 / 자동 업그레이드 및 패치 |
| 낮은 비용 | 사용한 만큼만 지불 / 유휴 클러스터 비용 제거 / 리소스 과다 프로비저닝 없음 / 마지막 쿼리 후 10분 후 자동 제거 |
┌─────────────────────────────────────────────────────────────┐
│ Workflows │ Delta Live │ Databricks │ AI/BI Dashboard │ Mosaic AI │
│ │ Tables │ SQL │ 및 Genie │ │
├─────────────────────────────────────────────────────────────┤
│ Databricks IQ │
├─────────────────────────────────────────────────────────────┤
│ Unity Catalog │
├─────────────────────────────────────────────────────────────┤
│ Delta Lake │
├─────────────────────────────────────────────────────────────┤
│ 오픈 데이터 레이크 (모든 원시 데이터) │
│ (로그, 텍스트, 오디오, 비디오, 이미지) │
└─────────────────────────────────────────────────────────────┘
| 구성 요소 | 설명 |
|---|---|
| 클라우드 데이터 스토리지 | AWS S3, Azure Data Lake Storage, Google Cloud Storage 지원 |
| Delta Lake | 오픈소스 스토리지 프로토콜 |
| Unity Catalog | 데이터 거버넌스 및 메타데이터 관리 |
| Delta Sharing | 조직 간 데이터 안전 공유 프로토콜 |
| Databricks Marketplace | 데이터 및 AI 자산 마켓플레이스 |
| Databricks 클린 룸 | 안전한 협업 데이터 공간 |
생성적 및 기존 AI 애플리케이션 개발을 위한 종단 간 지원:
| 기능 | 설명 |
|---|---|
| MLflow | ML 실험 추적 및 모델 관리 |
| AutoML | 자동 머신러닝 |
| Feature Store | 특징값(Feature) 저장 및 재사용 |
| Model Serving | 학습된 모델을 API로 서빙 |
| Vector Search | 벡터 기반 유사도 검색 |
| AI Playground | LLM 실험 공간 |
| Agent Framework | AI 에이전트 구축 |
| Model Training | 대규모 모델 학습 |
| 도구 | 역할 |
|---|---|
| Databricks Workflows | 제어 흐름 — DLT 파이프라인을 포함하여 플랫폼의 모든 것을 조율 |
| Delta Live Tables (DLT) | 데이터 흐름 — Delta Lake를 위한 자동화된 데이터 파이프라인 |
| 도구 | 설명 |
|---|---|
| Databricks SQL | 최고의 가성비로 데이터 웨어하우징 및 분석 수행 |
| AI/BI Dashboards | 통합된 시각화 및 프레젠테이션 환경 |
| AI/BI Genie (공개 프리뷰) | 기업 내 고유한 용어를 사용하여 자연어로 데이터 질의 |
DatabricksIQ = 플랫폼 전반의 AI 강화 기능
DatabricksIQ
├── Natural Language Interfaces (자연어 인터페이스)
├── Intelligent Search and Discovery (지능형 검색)
├── AI-Powered Governance (AI 기반 거버넌스)
└── Simplified Administration and Maintenance (간소화된 관리)
데이터 소스: Unity Catalog / Docs / Dashboards / Notebooks /
Org Chart / Popularity / Lineage / Queries
Databricks Assistant: AI 기반 코드 작성 도우미
Unity Catalog = 여러 Databricks 워크스페이스에 걸친 통합 데이터 거버넌스 플랫폼
이전 (Unity Catalog 없이):
워크스페이스 1 워크스페이스 2
├── 사용자/그룹 관리 ├── 사용자/그룹 관리
├── 메타스토어 ├── 메타스토어
├── 액세스 제어 ├── 액세스 제어
└── 컴퓨팅 리소스 └── 컴퓨팅 리소스
→ 각 워크스페이스마다 별도로 관리해야 해서 복잡하고 비효율적
이후 (Unity Catalog 사용 시):
Unity Catalog
┌───────────────────────────┐
│ 사용자/그룹 관리 │
│ 메타스토어 │
│ 액세스 제어 │
└──────┬────────────────────┘
│ 공통 관리
┌──────┴──────────────┐
│ 워크스페이스 1 │ 워크스페이스 2
│ (컴퓨팅 리소스) │ (컴퓨팅 리소스)
└────────────────────────────┘
→ 한 번만 설정하면 모든 워크스페이스에 적용
메타스토어
├── 외부 저장소 액세스
├── 카탈로그 (데이터 계층 구조의 최상위)
├── 쿼리 페더레이션 (외부 데이터 소스 연결)
└── Delta Sharing (데이터 공유)
메타스토어
└── 카탈로그
└── 스키마 (데이터베이스)
├── 테이블
├── 뷰
├── 볼륨 (파일 저장소)
├── 함수
└── 모델
데이터 접근 방법:
SELECT * FROM catalog1.schema1.table1;
| 기능 | 설명 |
|---|---|
| 통합 네임스페이스 | 모든 워크스페이스에서 데이터 세트, 파일, ML 모델에 대한 단일 네임스페이스 제공 |
| 세분화된 액세스 제어 | 표준 SQL GRANT/REVOKE 문으로 정확한 접근 권한 설정 (최소 권한 원칙) |
| 데이터 계보(Lineage) | 데이터 흐름을 추적하고 시간에 따른 데이터 변환 이해 |
| 중앙화된 메타데이터 관리 | 정의·설명 등 메타데이터를 중앙에서 관리, 프로젝트 전반에서 일관성 유지 |
| Databricks SQL과 통합 | 플랫폼 외부로 데이터를 이동하지 않고도 데이터 자산 원활하게 쿼리/관리 |
Azure Databricks는 다음 데이터 원본에 연결 가능:
| SQL | DataFrame (Python) |
|---|---|
SELECT col_1 FROM myTable | df.select(col("col_1")) |
DESCRIBE myTable | df.printSchema() |
SELECT * FROM myTable WHERE col_1 > 0 | df.filter(col("col_1") > 0) |
..GROUP BY col_2 | ..groupBy(col("col_2")) |
..ORDER BY col_2 | ..orderBy(col("col_2")) |
..WHERE year(col_3) > 1990 | ..filter(year(col("col_3")) > 1990) |
SELECT * FROM myTable LIMIT 10 | df.limit(10) |
display(myTable) (텍스트 형태) | df.show() |
display(myTable) (HTML 형태) | display(df) |
1단계: 샘플 데이터 다운로드
https://raw.githubusercontent.com/~~~
2단계: 카탈로그에 테이블 생성
3단계: SQL로 데이터 조회
%sql
SELECT * FROM `카탈로그조직이름`.`default`.`products`;
4단계: DataFrame으로 데이터 분석
df = spark.sql("SELECT * FROM products")
df = df.filter("Category == 'Road Bikes'")
display(df)
Delta Lake = 클라우드 저장소에 파일을 읽고 쓰기 위한 오픈소스 프로토콜
일반 데이터 레이크는 파일을 그냥 저장합니다. 문제는:
Delta Lake는 이 문제를 해결합니다. 데이터베이스처럼 트랜잭션, 버전 관리, 스키마 관리를 지원하면서 저렴한 클라우드 스토리지를 사용합니다.
DeltaTableName/
├── [Parquet 파일들] ← 실제 데이터
└── _delta_log/ ← 트랜잭션 로그 (메타데이터)
├── ...0000.json
├── ...0001.json
└── ...0002.json
SQL로 생성:
CREATE TABLE orders USING DELTA
Python으로 생성:
df.write.format("delta")
Delta Lake는 Databricks에서 생성된 테이블의 기본 형식입니다.
클라우드 기반 객체 스토리지에 저장된 데이터에 대해 ACID 트랜잭션을 테이블 수준에서 보장:
| 속성 | 설명 |
|---|---|
| Atomicity (원자성) | 전체 트랜잭션이 완료되거나, 아니면 아예 실행 안 됨 (중간 상태 없음) |
| Consistency (일관성) | 데이터는 규칙을 따르거나, 트랜잭션이 롤백됨 |
| Isolation (격리성) | 한 트랜잭션이 완전히 완료된 후 다른 트랜잭션이 시작 |
| Durability (지속성) | 완료된 데이터는 영구적인 상태로 저장 |
| 작업 | 설명 |
|---|---|
| INSERT | 새로운 행 추가 |
| UPDATE | 기존 값 업데이트 |
| DELETE | 행 삭제 |
| MERGE | 소스 테이블에서 레코드를 선택해 대상 테이블에서 여러 DML 작업 수행 |
Delta 테이블은 모든 쓰기 작업의 트랜잭션 로그를 보관:
| 기능 | 설명 |
|---|---|
| 스키마 진화(Schema Evolution) | 데이터 변경에 따라 Delta 테이블의 스키마가 자동으로 조정 |
| 스키마 강제(Schema Enforcement) | 입력 데이터가 테이블의 정의된 스키마와 일치하는지 자동 검증 |
메달리온 아키텍처 = 데이터를 품질 수준별로 3단계 레이어에 저장하는 설계 패턴
데이터 소스 → [브론즈] → [실버] → [골드] → 사용자(BI, ML, 스트리밍)
| 레이어 | 역할 | 특징 |
|---|---|---|
| 브론즈 (Bronze) | 원시 데이터 저장 | 외부 소스에서 온 데이터 그대로 저장 / 장기간 보관 (수 년) / 필요 시 PII(개인정보) 제거 |
| 실버 (Silver) | 정제 및 검증 | 필터·정제·조인 및 브론즈 데이터 보강 / 구조를 정의하고 스키마 진화/강제 / 단일 진실 원천 (Single source of truth) |
| 골드 (Gold) | 비즈니스 수준 집계 | 바로 사용 가능한 정제된 데이터 / 실버 데이터의 비즈니스 수준 집계 / BI·ML·앱에 최종 전달 |
각 레이어에서 사용되는 DML 작업:
브론즈: INSERT (새 데이터 삽입)
↓
실버: DELETE, MERGE (정제, 중복 제거)
↓
골드: OVERWRITE, AGGREGATE (최종 집계)
Delta Lake ACID 지원 덕분에 데이터 변환 프로세스 전체에서 insert, delete, update, merge가 안전하게 가능합니다.
실제 환경에서는 더 복잡합니다:
데이터 스트림 소스 ──→ 브론즈A ──→ 실버A ──→ 골드A ──→ BI & 리포팅
배치 소스 ──────────→ 브론즈B ──→ 실버B ──→ 골드B ──→ ML & AI
Data Lake ──────────→ 브론즈C ──→ 실버C ──→ ──→ 스트리밍 분석
데이터 스트림 소스 ──→ 브론즈D ──→ ──→ 골드D
모든 계층이 Delta Lake 위에서 동작합니다.
이 문서는 "Azure Databricks를 활용한 데이터 병렬처리 — 데이터스쿨 3기" 강의 자료를 기반으로 정리되었습니다.