spark의 local mode와 deploy mode

seoyeon hwang
5 min readSep 4, 2022

spark-submit 명령어로 애플리케이션을 제출할때 --master--deploy-mode 옵션으로 어떤 모드로 실행할지 정할 수 있다. 각 모드마다 어떤 차이점이 있는지 자세히 정리해보려고 한다 :)

spark 구조

spark 구조

spark는 master/slave 구조로 1개의 Driver (중앙 조정자)와 N개의 executor (분산 작업 노드)로 구성되어있다. cluster에서 분산 모드로 실행된다면 하나의 spark application은 cluster manager(ex. YARN) 라고 불리는 외부 서비스를 사용해서 여러 개의 머신에서 실행된다.

cluster manager

cluster manager는 여러 서버로 구성된 클러스터 환경에서 애플리케이션들이 잘 동작할 수 있도록 자원을 관리한다. cluster manager 종류에는 크게 standalon, yarn, mesos가 있다.

만약 클러스터에 spark만 운영한다면 standalone 모드가 가장 설정하기 쉽고, yarn/mesos와 같은 cluster manager를 사용한다면 하둡 맵리듀스와 같은 다른 분산 작업도 수행 가능하다.

local mode와 deploy mode란?

local mode와 deploy mode를 선택하는 기준은 cluster를 사용 여부다. 즉, cluster를 사용해서 분산 모드로 애플리케이션을 실행한다면 deploy mode, 그렇지 않다면 local mode다.

cluster를 사용한다면 cluster manager 종류와 배포 방식을 선택할 수 있다. cluster manager는 standalone, YARN, Mesos 등 중에 선택할 수 있다. 배포 방식에는 client, cluster가 있고 어떤 방식을 사용하느냐에 따라 driver 실행 위치가 달라진다.

즉, 우리는 spark 애플리케이션을 실행할때 local mode, client mode, cluster mode 총 3가지 방식으로 실행할 수 있다. 각 mode에 대해 살펴보자!

1) local mode

local mode

local mode는 local client JVM에 driver 1개와 executor 1개를 생성하는 형태로, 클러스터를 사용하지 않고 로컬 단일 머신에서 애플리케이션을 실행한다. 따라서 단일 머신 환경을 구축하거나 간단한 테스트를 할 때 유용하다.

spark-submit --master local[N] ...

local mode로 실행하고 싶다면 위와 같이spark-submit 명령어에 --master local[N] 으로 옵션 값을 설정하면 된다. N은 몇개의 executor core를 사용할지 나타내는 숫자로, local[*] 로 지정시 갖고 있는 모든 core를 사용한다.

2) client mode

client mode

client mode는 driver가 cluster 외부인 Client JVM에서 실행된다. client 프로세스에 driver program과 그 안에 spark application, spark context가 있기 때문에 client 프로세스를 중지시키면 수행 중이던 모든 스파크 잡도 중단된다. driver program의 출력을 직접 확인 가능하기 때문에 주로 디버깅할 때 사용된다.

spark-submit --master yarn --deploy-mode client

cluster manager는 YARN을 사용하고 client mode로 실행하고 싶다면 위과 같이 spark-submit 명령어에 --master yarn--deploy-mode client으로 옵션 값을 지정하면 된다.

3) cluster mode

cluster mode

cluster mode는 driver가 cluster 내부의 worker 노드 중 하나에서 실행된다. 애플리케이션은 cluster 내부에서 독립적인 프로세스로 실행되고 cluster manager에 의해 조정되기 때문에 해당 모드에서 client는 애플리케이션 제출 후 개입하지 않는다. cluster mode는 주로 프로덕션 잡을 수행할때 사용한다.

spark-submit --master yarn --deploy-mode cluster

cluster manager는 YARN을 사용하고 cluster mode로 실행하고 싶다면 위과 같이 spark-submit 명령어에 --master yarn--deploy-mode cluster으로 옵션 값을 지정하면 된다.

--

--