IT 정리/아파치 스파크

RDD, Docker 소개

유정임 2026. 4. 30. 14:10

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

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"
  1. services : 여러개의 서비스를 만들수 있음
  2. app : 하나의 서비스의 이름은 'app'
  3. build : 현재 위치(.)에 있는 Dockerfile를 찾아가라.
  4. ports : 로컬 포트 : 컨테이너 포트 순서로 로컬 머신과 Docker머신 안에 있는 포트를 연결
  5. volumes: 로컬 머신과 Docker 머신 안에 디렉토리 매핑
  6. command : 컨테이너가 켜지자 마자 실행할 마지막 한마디. 현재는 Django 실행하라고 명령 중

 

 

 

 

 

 

 

 

 

References

https://sseozytank.tistory.com/85

'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