구조
Spark 애플리케이션은 클러스터에서 독립적인 프로세스 집합으로 실행되며, 메인 프로그램인 드라이버 프로그램의 SparkContext 객체가 조정한다.
SparkContext는 독립 실행형 클러스터 매니저, Mesos, YARN, Kubernetes 등 여러 클러스터 관리자에 연결하여 클러스터의 리소스를 관리한다. 또한 JAR, Python으로 정의된 애플리케이션을 데이터를 저장하고 처리하는 Executor 프로세스로 전달한다.
각 애플리케이션은 실행 시간 동안 유지되고 멀티스레딩으로 처리되는 자체적인 executor 프로세스를 가진다. 이는 스케쥴러와 executor에서 애플리케이션을 격리할 수 있다는 이점을 가지지만, 외부 스토리지 시스템 없이는 서로 다른 Spark 애플리케이션 간 데이터를 공유할 수 없다는 단점이 있다.
Spark는 기본 클러스터 관리자에 구애받지 않는다. executor 프로세스를 획득하면 다른 애플리케이션을 지원하는 클러스터 관리자에서도 상대적으로 쉽게 실행할 수 있다.
Spark 애플리케이션
드라이버와 Executor로 실행되는 Spark 실행 프로그램.
Cluster Manager가 애플리케이션 리소스를 효율적으로 배분한다.
Driver
Spark 애플리케이션을 실행하는 프로세스. main 함수를 실행하고 SparkContext 객체를 생성한다.
드라이버는 Spark 애플리케이션 수명주기를 관리하고, 사용자가 받은 입력을 애플리케이션에 전달하고 애플리케이션 처리 결과를 사용자에게 전달한다.
Executor
실제로 Task를 실행하는 프로세스로, Task 단위로 작업을 실행하고 그 결과를 드라이버에 전달한다.
동작 중 오류가 발생하면 작업을 재시도한다.
Task
Executor에서 실행되는 실제 작업에 해당한다.
참고 문서
https://spark.apache.org/docs/latest/cluster-overview.html