RDD란?
- 스파크에서 중심이 되는 데이터셋
- Resilient Distributed Dataset : 탄력성 있는 분배된 데이터셋
- 데이터셋을 만들면 더 이상 변하지 않게 래핑해서 노드(분산시스템)로 보내는 역할
- 데이터가 여러개로 레플리카(복제) 되어있기 때문에 데이터가 잃으면 자동으로 RDD가 기존의 데이터를 restall
RDD의 주요 특징
- Immutability
- 한번 만들어지면, 분산시스템에서 수정하기 어려움
- 데이터를 바꾸게 되면 새로운 RDD가 생김
- Distributed
- 분산 시스템에 저장되는 데이터셋이기 때문에 수평적 프로세싱 가능
- Resilience(Fault Tolerance)
- Lazy Evaluation
- 파이썬에서 제너레이터역할
- 정말 필요한 순간 아니면 실행되지 않음
- collect() 혹은 save()라는 메소드가 실행되기 전까지 데이터는 lineage만 만듦, 트리거 되면 optimazed된 포맷으로 다시 만듦
- Partitioned
Docker Benefits
- 개발 시 어디서나 똑같은 환경을 만들 수 있음
- OS, 파이썬 버전, 파이썬 라이브러리, 환경 등 포함
- Usage
- Create Dockerfile
- 특정 컨테이너 하나를 어떻게 만들지 적어 놓음, 이 설명서대로 만들면 결과는 이미지
- Create Docker Compose
- 여러 개의 컨테이너를 어떤 규칙으로 한꺼번에 실행할지 적어놓은 기획서, 결과는 여러 개의 서비스가 동시에 작
- Run Docker Compose to start all environments
- Create Dockerfile

Docker 작동원리
- 이미지 - 프로그램이 실행되기 위해 필요한 모든 요소를 모아놓음(코드, 설정, 라이브러리)
- 이미지로는 아무것도 실행 불가하지만 이미지만 있으면 어디서든 똑같은 결과물을 만들 수 있음
- 컨테이너 - 이미지를 실행시킨 실제 상태
- 이미지를 이용해 만들어낸 실제 가동중인 프로그램 묶음
- 하나의 이미지로 수백개의 동일한 컨테이너 생성 가능
- 컨테이너 안에는 서로 다른 것들이 들어있지만 서로 섞이지 않음
Dockerfile 구성
FROM python:3.11.1
ENV PYTHONUNBUFFERED 1
ARG DEV=false
COPY requirements.txt /app/
COPY requirements.dev.txt /app/
COPY app /app/
WORKDIR /app
RUN pip install -r requirements.txt
RUN if [ $DEV = true]; then pip install -r requirements.dev.txt; fi
EXPOSE 8000
- FROM python:3.11.1 : 파이썬 base 이미지를 3.11.1버전으로 사용
- COPY : 외부에 있는 파일을 컨테이너 안의 /app/이라는 폴더로 복사해서 사용
- WORDKIR : 어떤 디렉토리를 사용하는지 선언, 이후에는 모든 커맨드가 WORKDIR안에서 이루어짐
- EXPOSE : docker port를 연결시킬 수있음
- Docker Compose가 작동하기 위해선 Dockerfile이 미리 준비되어있어야 함.
중간 정리
- 하나의 이미지로 하나의 컨테이너를 만들때 : Dockerfile → 하나의 이미지 → 하나의 컨테이너
- 여러개의 컨테이너로 하나의 서비스를 만들 때
: 각각의 Dockerfile로 이미지를 여러개 만듦 → 그럼 각 이미지당 한개의 컨테이너 생성 → docker-compose.yml이 이 과정들을 명령( 이때 실행뿐만 아니라, 컨테이너들의 네트워크도 자동으로 깔아줌) → dockercompose로 실행하면 하나의 서비스처럼 묶임
Docker Compose
- Configuration = docker-compose.yml
- service name : 컨테이너 묶음에 붙이는 고유한 이름
- Port mapping between local and Docker : 로컬 컴퓨터의 포트와 컨테이너 내부의 포트를 연결
- Volume mapping between local and Docker : 내 컴퓨터(로컬)의 폴더와 컨테이터 내부의 폴더를 동기화, 프로그램을 수정할 때마다 매번 컨테이너를 만들 필요가 없어 작업이 매우 빨라짐
- Run = docker compose 명령어
- docker compose build : Dockerfile을 이용해 이미지 빌드
- docker compose up : 이미지 Dockerframework 위에서 실행
Q : 그럼 하나의 컨테이너만 만들 때 docker-compose.yml이 필수인가??
A : 필수는 아니지만 대부분 생성함
- docker-compose.yml이 없어도 되는 경우 : 터미널에 명령어 직접 타이핑해서 실행하는 경우
- 하나뿐인데도 .yml 파일 쓰는 이유 : 자동화
docker-compose.yml 예시
version: "3.9"
services:
app:
build:
context: .
args:
- DEV = true
ports:
- "8000:8000"
volumes:
- ./app:/app
command: >
sh -c "python manage.py runserver 0.0.0.0:8000"
- services : 여러개의 서비스를 만들수 있음
- app : 하나의 서비스의 이름은 'app'
- build : 현재 위치(.)에 있는 Dockerfile를 찾아가라.
- ports : 로컬 포트 : 컨테이너 포트 순서로 로컬 머신과 Docker머신 안에 있는 포트를 연결
- volumes: 로컬 머신과 Docker 머신 안에 디렉토리 매핑
- command : 컨테이너가 켜지자 마자 실행할 마지막 한마디. 현재는 Django 실행하라고 명령 중
References
'IT 정리 > 아파치 스파크' 카테고리의 다른 글
| Spark 기초(1) (0) | 2026.05.01 |
|---|---|
| Spark 환경 설정 (0) | 2026.04.30 |
| Apache Spark 설치(window), jupyter 접속 (0) | 2026.04.30 |
| 클러스터&스파크 아키텍쳐 소개 (0) | 2026.04.30 |
| 아파치 스파크 소개 (0) | 2026.04.30 |