loading
본문 바로가기
Skill-UP/Spark

[Spark] 스파크 구조 및 실행 과정

by 개발자 김모씨 2020. 9. 8.
반응형

 

스파크는 크게 보면
스파크 어플리케이션과 클러스터 매니저로 구성되어 있다.

스파크 어플리케이션은 실제 일을 수행하는 역할을 담당하며,
클러스터 매니저는 스파크 어플리케이션 사이에 자원을 중계해주는 역할을 담당한다.

 

스파크 어플리케이션(Spark Application)

 

먼저 스파크 어플리케이션부터 살펴보자.

<Spark The Definitive Guide 발췌>

스파크 어플리케이션은 Driver 프로세스와 익스큐터 프로세스로 구성된다.

Spark Driver는 한 개의 노드에서 실행되며, 스파크 전체의 main() 함수를 실행한다.
어플리케이션 내 정보의 유지 관리, 익스큐터의 실행 및 실행 분석, 배포 등의 역할을 수행한다.
사용자가 구성한 사용자 프로그램(Job)을 task 단위로 변환하여, Executor로 전달한다.

Executer는 다수의 worker 노드에서 실행되는 프로세스로,
Spark Driver가 할당한 작업(task)을 수행하여 결과를 반환한다.
또한 블록매니저를 통해 cache하는 RDD를 저장한다.

1개의 스파크 어플리케이션에는
1개의 Spark Driver와 N개의 Executor가 존재한다.
이 때, Executor는 Cluster Manager에 의하여 해당 스파크 어플리케이션에 할당되며,
해당 스파크 어플리케이션이 완전히 종료된 후 할당에서 해방된다.
그렇기 때문에, 서로 다른 스파크 어플리케이션 간의 직접적인 데이터 공유는 불가능하다.
(각 스파크 어플리케이션이 별도의 JVM프로세스에서 동작하므로)

 

클러스터 매니저(Cluster Manager)

클러스터 매니저는 스파크와 붙이거나 뗄 수 있는, Pluggable한 컴포넌트로,
스파크 어플리케이션의 리소스를 효율적으로 분배하는 역할을 담당한다.
스파크는 익스큐터를에 태스크를 할당하고 관리하기 위하여 클러스터 매니저에 의존한다.

이 때, 스파크는 클러스터 매니저의 상세 동작을 알지 못한다.(Black-box)
단지 클러스터 매니저와의 통신을 통하여, 할당 가능한 Executor를 전달받는다.

현재 스파크 3.0 기준으로,
사용 가능한 클러스터 매니저에는 Spark StandAlone, (Hadoop)Yarn, Mesos, Kubernetes 등이 있다.

<클러스터 매니저의 종류>

Spark StandAlone은 클러스터가 아닌 단일 컴퓨터에서 스파크 전체를 동작시키는 방식이다.
이 때  Spark Driver와 Executor는 각각 thread로 동작한다.
Worker 노드에 여러개의 Executor를 실행시킬 수 있는 Yarn, Mesos, K8s와 달리,
StandAlnoe 모드의 경우 Executor는 Worker 노드 하나당 한개 씩 동작한다.

 

Spark Application 실행 과정(흐름)

사용자가 Spark를 사용할 때의 대략적인 실행 흐름은 다음과 같다.

1. 사용자가 Spark-submit을 통해 어플리케이션을 제출한다.
2. Spark Driver가 main()을 실행하며, SparkContext를 생성한다.
3. SparkContext가 Cluster Manager와 연결된다.
4. Spark Driver가 Cluster Manager로부터 Executor 실행을 위한 리소스를 요청한다.
5. Spark Context는 작업 내용을 task 단위로 분할하여 Excutor에 보낸다.
6. 각 Executor는 작업을 수행하고, 결과를 저장한다.

요약 : 사용자 프로그램을 수행하기 위하여, Spark Driver 내의 Spark Context가 Job을 task 단위로 쪼갠다.
        Cluste Manager로부터 할당받은 Executor로 task를 넘긴다.

반응형

댓글