본문 바로가기
Development/Data Engineering

[Apache Spark] 스파크의 구조와 실행흐름 이해하기

by _KHK 2022. 3. 30.

스파크 애플리케이션의 구조

출처 https://spark.apache.org/docs/latest/cluster-overview.html

스파크를 사용하면서 잊지 말아야 하는 점은 데이터는 항상 분산되어 있고 같은 연산을 하더라도 여러 노드에서 작업한다는 점이다.

[스파크 구조 설명]

스파크는 작업을 관리하는 드라이버 프로그램과 작업이 실제로 작동되는 워커 노드로 나뉘어 있다. 그리고 중간은 클러스터 매니저가 존재하는데 클러스터 매니저는 드라이버 프로그램과 워커노드를 연결시켜주는 중간다리 역할을 한다.

[용어 설명]

  • Driver Program : 개발자가 상호작용 할 수 있는 노드이다. main함수를 실행하고 스파크 Context를 생성한다.
  • Spark Context : 새로운 RDD를 생성하고, 클러스터 매니저와 연결되는 객체이다.
  • Cluster Manager : 드라이버에서 지시받은 작업(리소스)의 스케쥴링과 자원관리를 한다.
  • 대표적인 클러스터 매니저에는 대표적으로 Yarn, Mesos, Kubernetes 등이 있다.
  • Worker Node : 실질적인 작업(task)을 담당하는 공간
  • Executor : 연산을 수행, 저장하고 추출된 결과값을 드라이버 프로그램에 전송한다.
  • cache : 연산을 하면서 필요한 저장공간을 활용

[스파크 내부 구조의 실행 흐름]

1. 드라이버 프로그램이 Spark Context를 생성해 스파크 어플리케이션을 생성한다.

2. Context가 클러스터 매니저와 연결되고 클러스터 매니저는 클러스터에 있는 노드들의 Executor를 수집하고 자원을 할당한다.
(작업을 수행할 Executor가 클러스터 매니저의 관리하에 생성된다고 이해하면 편할듯 싶다.)

3. Context는 작업(task)을 수행할 데이터(코드)를 Executor 에게 전송하고 Executor는 실행된 결과값을 다시 드라이버 프로그램에 전달한다.

댓글