Apache Spark 설정

2026. 1. 7. 17:02ㆍ카테고리 없음

https://hub.docker.com/r/apache/spark/tags?name=python

services:
  zookeeper:
    image: wurstmeister/zookeeper
    container_name: zookeeper
    ports:
      - "2181:2181"

  kafka:
    image: wurstmeister/kafka
    container_name: kafka
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: localhost
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - zookeeper

  spark-master:
    image: apache/spark:3.5.0-python3
    container_name: spark-master
    ports:
    - "8080:8080"
    - "7077:7077"
    command: /opt/spark/bin/spark-class org.apache.spark.deploy.master.Master
    
  spark-worker:
    image: apache/spark:3.5.0-python3
    container_name: spark-worker
    depends_on:
      - spark-master
    environment:
      - SPARK_WORKER_CORES=1
      - SPARK_WORKER_MEMORY=1g
    command: /opt/spark/bin/spark-class org.apache.spark.deploy.worker.Worker spark://spark-master:7077

https://hub.docker.com/r/bitnamicharts/spark/tags

1. 서비스 구조: Master와 Worker

Spark는 혼자 일하지 않고 역할을 나누어 일을 처리합니다.

  • spark-master (대장):
    • 전체적인 스케줄링을 담당합니다.
    • 어떤 일꾼(Worker)에게 어떤 작업을 시킬지 결정하고 관리합니다.
  • spark-worker (일꾼):
    • 대장에게 받은 실제 데이터를 연산하고 처리하는 역할을 합니다.
    • 데이터가 많아지면 이 Worker 컨테이너 개수를 늘려서 처리 속도를 높일 수 있습니다.

 


 

2. 주요 설정 항목 분석

🔹 Spark Master 설정

  • image: apache/spark:3.5.0-python3: apache spark 3.5 버전
  • ports:
    • 8080:8080: Web UI 포트입니다. 브라우저에서 localhost:8080에 접속하면 현재 내 Spark가 잘 돌아가는지, 일꾼들이 몇 명인지 시각적으로 확인할 수 있습니다.
    • 7077:7077: 내부 통신 포트입니다. 일꾼(Worker)들이 대장에게 "저 출근했습니다!"라고 보고할 때 사용하는 통로입니다.
  • command: /opt/spark/bin/spark-class org.apache.spark.deploy.master.Master
    • /opt/spark/bin/spark-class: 스파크 내부의 자바(Java) 클래스를 실행하기 위한 범용 실행 도구입니다. 스파크의 모든 핵심 기능은 이 도구를 거쳐서 실행됩니다.
    • org.apache.spark.deploy.master.Master: 실제 실행할 **자바 클래스의 전체 이름(Full Name)**입니다. 이 클래스가 실행되면 스파크 클러스터의 "대장(Master)" 프로세스가 시작됩니다.
      • 이 프로세스는 워커들의 상태를 관리하고, 우리가 제출할 분석 작업(Job)을 누구에게 시킬지 결정하는 역할을 합니다.

🔹 Spark Worker 설정

  • depends_on: - spark-master: 대장이 먼저 출근해야 일꾼이 일을 시작할 수 있으므로 실행 순서를 보장합니다.
SPARK_WORKER_CORES: 1
SPARK_WORKER_MEMORY: 1G
  • 의미: 워커 컨테이너가 사용할 자원의 한도를 정해주는 것입니다.
  • 공식 이미지에서 이 변수들을 설정해두면, 아래 command가 실행될 때 내부적으로 이 값을 읽어서 "나는 CPU 1개랑 메모리 1GB만 쓰는 일꾼이다"라고 마스터에게 보고하게 됩니다.
  • command: /opt/spark/bin/spark-class org.apache.spark.deploy.worker.Worker spark://spark-master:7077
    • org.apache.spark.deploy.worker.Worker: "일꾼(Worker)" 프로세스를 시작하는 클래스입니다.
    • spark://spark-master:7077: 가장 중요한 부분입니다. 워커가 누구에게 보고해야 할지 알려주는 마스터의 주소입니다.
      • spark-master: Docker Compose 서비스 이름 (도커 내부 DNS가 이 이름을 IP로 바꿔줍니다).
      • 7077: 스파크 마스터와 워커가 통신할 때 사용하는 기본 포트입니다. (8080은 관리자용 웹 화면 포트고, 7077은 실제 데이터/명령용 포트입니다.)

 

 

태그 읽는 법

  • 4.1.0: Spark 엔진 버전
  • scala2.13: 내부적으로 사용하는 스칼라 언어 버전 (우리는 무시해도 됨)
  • java21: 실행 기반이 되는 자바 버전
  • python3: 우리가 꼭 필요한 파이썬 환경
  • ubuntu: 컨테이너의 기본 운영체제

 

반응형