[Spark] Spark submit 주요옵션 & deploy-mode

Yeolsim's logs·2024년 11월 24일
0

유데미의 [Apache Spark - Beyond Basics and Cracking Job Interviews] 강의 내용 복습 겸 정리
강의링크

spark의 작업을 클러스터에 제출할때 보통 spark-submit 명령어로 클러스터에 배포하며
이때, 드라이버와 워커노드 리소스를 옵션을 통해 세부적으로 설정할 수 있다.

Spark 애플리케이션 배포 및 spark-submit 요약

1. 배포 단계

  1. 로컬 테스트
    • 로컬 머신에서 애플리케이션 개발 및 테스트.
  2. 테스트 클러스터 배포
    • 작은 클러스터에서 테스트 실행.
  3. 프로덕션 클러스터 배포
    • 대규모 클러스터에서 최종 실행.

2. spark-submit 사용

  • 역할: 클러스터에 Spark 애플리케이션 제출.
  • 명령어 형식:
    spark-submit [옵션] 애플리케이션.jar 또는 PySpark 스크립트 [애플리케이션 인자]
    

3. 주요 spark-submit 옵션

-class
Java/Scala의 main() 메서드가 정의된 클래스 지정.
PySpark에서는 필요 없음.

-master
클러스터 매니저 지정.

-yarn: YARN 클러스터.
local: 로컬 실행 (local[3] → 3개의 스레드 사용).

-deploy-mode
클러스터에서 드라이버 실행 위치 설정.
client: 로컬 머신에서 드라이버 실행.
cluster: 클러스터 내에서 드라이버 실행.

Spark 애플리케이션을 제출할 때 spark-submit 명령어로 클러스터 모드와 클라이언트 모드 두 가지 중 하나를 선택할 수 있습니다.

3-1) deploy-mode 세부내용

- 클러스터 모드

  • spark-submit이 YARN 리소스 매니저(RM)에게 드라이버를 클러스터 내 워커 노드의 AM 컨테이너에서 시작해달라고 요청합니다.
  • 드라이버와 실행자 모두 클러스터 내부에서 실행됩니다.
  • 장점:
    • 클러스터에서 드라이버와 실행자가 실행되므로 클라이언트 머신에서 로그아웃해도 애플리케이션은 계속 실행됩니다.
    • 드라이버와 실행자가 가까이 위치하여 통신 지연이 줄어들고 성능이 향상됩니다.
  • 주 사용 사례: 일반 애플리케이션 제출 시 거의 항상 사용됩니다.

- 클라이언트 모드

  • spark-submit이 클라이언트 머신에서 직접 드라이버 JVM을 시작합니다.

  • 드라이버는 클라이언트 머신에서 실행되고, 실행자만 클러스터에서 실행됩니다.

  • 장점:

    • Spark 쉘이나 노트북처럼 사용자와의 상호작용이 필요한 경우 적합합니다.
    • 클라이언트에서 드라이버가 실행되므로 결과를 빠르게 확인할 수 있고, 종료 시 쉽게 정리됩니다.
  • 주 사용 사례: Spark 쉘, 노트북 등 인터랙티브한 작업에 사용됩니다.

    -> 일반 애플리케이션의 경우 성능과 안정성을 위해 클러스터 모드를 사용
    -> 인터랙티브 작업에는 클라이언트 모드를 사용

4. 추가 옵션

  • -conf
    추가 Spark 설정 제공.
    예: -conf spark.executor.memoryOverhead=0.20 (기본값: 0.10).

5. 리소스 할당 옵션

  1. 드라이버 리소스
    -driver-cores: 드라이버 컨테이너 CPU 코어 수.
    -driver-memory: 드라이버 컨테이너 메모리 용량.

  2. 실행자 리소스
    -num-executors: 실행자 컨테이너 수.
    -executor-cores: 각 실행자 컨테이너 CPU 코어 수.
    -executor-memory: 각 실행자 컨테이너 메모리 용량.

6. spark-submit 명령어 예제

  • 명령어 예제

spark-submit \
  --class <클래스 이름> \
  --master yarn \
  --deploy-mode cluster \
  --driver-cores 2 \
  --driver-memory 8G \
  --num-executors 4 \
  --executor-cores 2 \
  --executor-memory 16G \
  애플리케이션.jar

예제 설명

  • 클러스터: YARN 클러스터 사용.
  • 모드: 클러스터 모드.
  • 리소스 할당:
    드라이버: 2 CPU 코어, 8GB 메모리.
    실행자: 4개 컨테이너, 각 컨테이너에 2 CPU 코어, 16GB 메모리.

0개의 댓글