Apache Spark는 분산 환경에서 대량의 데이터 처리를 위해 설계된 클러스터 컴퓨팅 시스템입니다. Spark의 아키텍처는 클러스터 매니저, 드라이버 프로그램, 그리고 실행기(Executor)라는 주요 구성 요소로 이루어져 있습니다.
드라이버 프로그램
드라이버 프로그램은 Apache Spark 애플리케이션의 중심적인 제어 역할을 하는 구성 요소입니다. 사용자가 작성한 Spark 애플리케이션 코드는 드라이버 프로그램에서 실행되며, 이는 SparkContext를 생성하고 Spark 작업의 실행을 조정합니다.
드라이버 프로그램의 주요 역할은 다음과 같습니다:
1. Spark Context 생성 : 드라이버 프로그램은 Spark 애플리케이션의 실행을 위해 SparkContext를 생성합니다. SparkContext는 Spark 클러스터에 대한 연결을 설정하고, 클러스터 매니저에게 작업 실행을 요청하는 역할을 합니다.
2. 작업 스케줄링 : 드라이버 프로그램은 애플리케이션 코드를 실행하면서 변환(Transformation)과 액션(Action)을 작업으로 변환하고, 이들 작업을 클러스터의 실행기(Executor)에게 스케줄링합니다. (로직 스케줄링)
3. 작업 상태 관리 및 모니터링 : 드라이버 프로그램은 모든 작업의 상태를 추적하고, 작업의 진행 상황을 모니터링합니다. 또한, 필요한 경우 장애 복구를 수행하고, 작업의 결과를 수집하여 사용자에게 반환합니다.
드라이버 프로그램은 Spark 애플리케이션의 수명 동안 계속 실행되며, 드라이버 프로그램이 종료되면 애플리케이션도 종료됩니다. 따라서 드라이버 프로그램은 충분한 메모리를 가지고 있어야 하며, 장애 복구를 위해 주요 작업 상태를 주기적으로 체크포인트로 저장하는 것이 좋습니다.
클러스터 매니저
클러스터 매니저는 Apache Spark의 핵심 구성요소 중 하나로, 클러스터 상의 자원을 관리하고 작업을 스케줄링하는 역할을 합니다.
클러스터 매니저는 Spark 애플리케이션을 실행하는 데 필요한 자원(CPU, 메모리, 네트워크 등)을 클러스터의 노드들에게 할당합니다. 또한, 클러스터 매니저는 드라이버 프로그램에서 생성된 작업을 클러스터의 각 노드에 분배하고, 작업의 실행을 조정합니다. (자원 스케줄링)
Apache Spark는 다양한 클러스터 매니저를 지원하며, 이에는 Standalone 클러스터 매니저, Hadoop YARN, Apache Mesos 등이 있습니다. 이러한 클러스터 매니저를 통해 사용자는 자신의 요구사항과 환경에 가장 적합한 방식으로 Spark 애플리케이션을 실행할 수 있습니다. 만약, 별도의 설정 없이 로컬 모드에서 구동하는 경우에는 Standalone 클러스터 매니저가 사용됩니다.
실행기 (Executor)
실행기는 Apache Spark의 핵심 구성요소 중 하나로, 실제 데이터 처리 작업을 수행하는 역할을 합니다.
실행기는 클러스터의 각 노드에서 독립적으로 실행되는 프로세스입니다. 드라이버 프로그램이 할당한 작업을 수행하고, 그 결과를 드라이버 프로그램에게 반환합니다.
각 실행기는 자신에게 할당된 작업을 병렬로 실행합니다. 이는 Spark가 대량의 데이터를 빠르게 처리할 수 있도록 해주는 중요한 특징입니다.
실행기는 자신에게 할당된 자원 내에서 작업을 수행하며, 이는 클러스터 매니저에 의해 관리됩니다. 실행기는 자신에게 할당된 자원을 최대한 효율적으로 활용하며, Spark 애플리케이션의 성능을 최적화합니다.
또한, 실행기는 필요에 따라 데이터를 메모리에 캐시할 수 있습니다. 이는 반복적인 작업을 빠르게 수행할 수 있도록 돕습니다. 결과적으로 실행기는 Spark 애플리케이션의 성능과 효율성에 중요한 역할을 합니다.
테스크 슬롯 (Task slot)
테스크 슬롯은 Apache Spark에서 병렬 처리를 위한 기본 단위로, 실제로 테스크가 실행되는 논리적인 공간을 의미합니다.
하나의 실행기는 여러 개의 테스크 슬롯을 가질 수 있으며, 각 테스크 슬롯은 동시에 하나의 테스크만을 실행할 수 있습니다. 즉, 실행기가 동시에 처리할 수 있는 테스크의 수는 그 안의 테스크 슬롯의 수에 의해 결정됩니다.
클러스터 매니저는 작업을 스케줄링할 때 이러한 테스크 슬롯을 고려합니다. 즉, 각 작업은 클러스터의 여러 노드에 분산된 테스크 슬롯에서 동시에 실행됩니다. 이를 통해 Spark는 대량의 데이터 처리 작업을 효율적으로 분산 처리할 수 있습니다.
'데이터 > Apache Spark' 카테고리의 다른 글
[Apache Spark] RDD란 무엇인가? (0) | 2023.11.26 |
---|---|
[Apache Spark] 로컬 환경에 설치 및 간단 예제 (2) | 2023.11.26 |
[Apache Spark] Transformation과 Action (1) | 2023.11.25 |
[Apache Spark] Apache Spark의 메커니즘 (0) | 2023.11.23 |
[Apache Spark] Apache Spark란 무엇인가? (2) | 2023.11.22 |