Post

Spark 배포 모드와 환경변수 전달 방식

Spark 배포 모드별 환경변수 전달 방식과 AWS SDK v2 설정 우선순위를 비교

Spark 배포 모드와 환경변수 전달 방식

요약

항목핵심 요점
배포 모드Driver 실행 위치에 따라 설정 적용 방식이 달라짐
환경변수 전달JVM 프로퍼티와 OS 환경변수 전달 방식 구분 필요
Python os.environExecutor에는 전달되지 않음

Driver 위치와 설정 적용 위치

구분Client modeCluster mode
Driver 실행 위치spark-submit 실행 위치
(클라이언트 머신/컨테이너)
클러스터 내부 노드
Driver 환경변수 설정 방법OS-level export
또는 compose environment
spark.driverEnv.X
또는 spark.driver.extraJavaOptions
Executor 환경변수 설정 방법spark.executorEnv.X 명시 필요spark.executorEnv.X 명시 필요

Executor 환경변수 전달 방식 비교

항목전달 방식JVM 내 접근 방법AWS SDK v2 인식 우선순위
spark.executorEnv.XOS 환경변수System.getenv("AWS_REGION")2순위
spark.executor.extraJavaOptionsJVM 시스템 프로퍼티 (-D)System.getProperty("aws.region")1순위
  • AWS SDK v2는 -Daws.region=...이 가장 우선순위가 높음
  • 실전에서는 두 가지를 병행 설정하는 것이 안정적임

Client mode에서 Executor에 환경변수 전달

  • 클라이언트 컨테이너 내 환경변수(export 또는 compose 환경변수)는 Executor에 전달되지 않음
  • Executor는 클러스터 워커 노드에서 실행되므로 반드시 다음과 같이 명시 필요:
1
--conf spark.executorEnv.AWS_REGION=us-east-1

Cluster mode에서 Driver와 Executor에 환경변수 전달

대상설정 방법
Driver--conf spark.driverEnv.AWS_REGION=us-east-1
--conf spark.driver.extraJavaOptions=-Daws.region=us-east-1
Executor--conf spark.executorEnv.AWS_REGION=us-east-1
--conf spark.executor.extraJavaOptions=-Daws.region=us-east-1
  • Cluster mode에서는 Driver/Executor 모두 명시적 설정이 필수

Python 코드 내 os.environ 전달 불가

항목설명
적용 범위Driver의 Python 런타임에만 적용
Executor 전달 여부전달되지 않음 (JVM 별도 프로세스이기 때문)
해결 방법spark.executorEnv.X 또는 spark.executor.extraJavaOptions 사용

결론

  • 배포 모드에 따라 Driver 위치가 달라지고, 설정 적용 대상도 달라진다.
  • JVM 시스템 프로퍼티(-D)와 OS 환경변수 전달 방식은 구분되어야 한다.
  • AWS SDK v2는 시스템 프로퍼티를 우선적으로 인식한다.
  • 실전에서는 Driver와 Executor에 명시적으로 설정을 전달하는 것이 가장 안전하다.
This post is licensed under CC BY 4.0 by the author.