아파치 스파크 실행 모드
아파치 스파크 실행 모드(Apache Spark Execution Modes)는 스파크 애플리케이션이 클러스터 환경에서 실행되는 방식에 대한 설정을 정의한다. 스파크는 여러 실행 모드를 지원하여 사용자가 환경에 맞는 실행 방법을 선택할 수 있도록 한다. 실행 모드는 주로 클러스터의 규모, 리소스 할당 방식, 작업의 복잡도 등을 고려하여 선택된다.
1 실행 모드 종류[edit | edit source]
스파크는 여러 가지 실행 모드를 제공하며, 주요 모드는 다음과 같다:
1.1 로컬 모드 (Local Mode)[edit | edit source]
로컬 모드는 스파크를 단일 머신에서 실행하는 방식으로, 개발 및 테스트 환경에 적합하다. 로컬 모드는 스파크 애플리케이션이 클러스터 없이 로컬 머신의 리소스를 사용하여 실행되며, 작은 규모의 데이터 처리에 사용된다. 이 모드에서는 모든 노드가 동일한 머신에 존재하므로, 데이터 처리 속도나 성능을 테스트하는 용도로 적합하다.
- 특징
- 모든 작업은 로컬 머신 내에서 실행된다.
- 클러스터가 필요 없으므로 간단한 설정으로 빠르게 테스트할 수 있다.
- 소규모 데이터에 적합하다.
- 용도
- 개발, 디버깅, 작은 데이터셋 처리에 사용된다.
1.2 클라이언트 모드 (Client Mode)[edit | edit source]
클라이언트 모드는 드라이버 프로그램이 클러스터 외부에서 실행되고, 클러스터 내부의 워커 노드들이 작업을 수행하는 모드이다. 이 모드는 애플리케이션을 제출하는 클라이언트 머신에서 드라이버가 실행되며, 스파크의 연산은 클러스터에서 실행된다. 다만 로컬 머신이 기본적으로 노드로써 동작하는 것은 아니다.
- 특징
- 드라이버가 클러스터 외부에서 실행된다.
- 클러스터 내 워커 노드에서 작업이 수행된다.
- 클라이언트 머신에서 드라이버가 실행되므로, 드라이버 상태에 대한 제어가 필요하다.
- 용도
- 클러스터 외부에서 애플리케이션을 실행해야 하는 경우에 사용된다.
1.3 클러스터 모드 (Cluster Mode)[edit | edit source]
클러스터 모드는 여러 노드를 포함하는 분산 환경에서 실행되는 방식이다. 드라이버는 워커 노드중 하나에 동작한다. 이 모드는 대규모 데이터 처리와 실제 애플리케이션 환경에서 사용된다. 클러스터 모드는 여러 노드가 협력하여 작업을 처리하므로, 데이터가 매우 크고 복잡한 작업을 다룰 때 적합하다. 클러스터 모드는 YARN, Mesos, Kubernetes와 같은 클러스터 매니저를 통해 실행된다.
- 특징
- 여러 워커 노드가 작업을 처리한다.
- 리소스 관리는 클러스터 관리자에 의해 이루어진다.
- 클러스터 환경에서 대규모 데이터 처리에 적합하다.
- 용도
- 대규모 분산 환경에서의 실시간 데이터 처리 및 배치 처리에 사용된다.
1.4 스파크 서브미터 모드 (Spark Submit Mode)[edit | edit source]
스파크 서브미터 모드는 스파크 애플리케이션을 제출할 때 사용하는 모드로, 애플리케이션을 클러스터에서 실행할 때는 클러스터 모드가 사용되고, 로컬에서 실행할 때는 로컬 모드가 사용된다. 서브미터 모드는 클러스터 환경에서 애플리케이션을 제출할 때 자원을 어떻게 할당할지 결정한다.
- 특징
- 로컬 모드와 클러스터 모드를 전환하여 실행할 수 있다.
- 클러스터 매니저를 통해 리소스를 할당받아 실행된다.
- 애플리케이션을 제출할 때 필요한 리소스를 정의할 수 있다.
- 용도
- 클러스터 환경에서 스파크 애플리케이션을 실행할 때 유용하다.
2 클러스터 매니저 종류[edit | edit source]
스파크는 다양한 클러스터 매니저와 연동할 수 있으며, 이 클러스터 매니저는 스파크 애플리케이션에 리소스를 할당하고, 클러스터 환경에서 실행을 조정한다. 주요 클러스터 매니저는 다음과 같다:
2.1 YARN (Yet Another Resource Negotiator)[edit | edit source]
YARN은 Hadoop 생태계에서 자원을 관리하는 클러스터 관리 시스템이다. YARN은 스파크 애플리케이션이 실행될 클러스터 리소스를 할당하고, 관리하는 역할을 한다. YARN을 사용하면 스파크 애플리케이션을 다른 Hadoop 작업들과 함께 실행할 수 있다.
2.2 Mesos[edit | edit source]
Mesos는 클러스터 리소스를 관리하고 스파크와 같은 분산 애플리케이션을 실행할 수 있는 클러스터 매니저이다. Mesos는 다중 클러스터와 다중 프레임워크를 지원하며, 스파크와 다른 분산 시스템을 동시에 실행할 수 있는 유연성을 제공한다.
2.3 Kubernetes[edit | edit source]
Kubernetes는 컨테이너화된 애플리케이션을 관리하고 오케스트레이션하는 시스템으로, 스파크를 실행할 수 있는 플랫폼으로 많이 사용된다. Kubernetes는 스파크 클러스터의 컨테이너를 자동으로 관리하고, 스케일링 및 모니터링을 제공한다.
3 실행 모드에 따른 성능 차이[edit | edit source]
- 로컬 모드는 단일 머신에서 실행되기 때문에 작은 데이터셋을 빠르게 처리할 수 있지만, 대규모 데이터 처리에는 한계가 있다.
- 클러스터 모드는 여러 워커 노드를 활용하여 데이터를 병렬로 처리하므로, 대규모 데이터셋을 처리하는 데 뛰어난 성능을 제공한다.
- 클라이언트 모드는 드라이버가 클러스터 외부에서 실행되기 때문에, 클러스터 내에서 실행되는 드라이버가 필요할 때 유용하다.
- 클러스터 관리자의 선택에 따라 성능 차이가 발생할 수 있으며, YARN, Mesos, Kubernetes는 각각 리소스 관리 방식과 성능에 차이가 있을 수 있다.
4 같이 보기[edit | edit source]
- 아파치 스파크
- RDD (Resilient Distributed Dataset)
- Spark SQL
- Spark Streaming
- MLlib
- GraphX
5 참고 문헌[edit | edit source]
- Zaharia, Matei, et al. "Spark: Cluster Computing with Working Sets." USENIX, 2010.
- Chambers, Bill, and Zaharia, Matei. "Spark: The Definitive Guide." O'Reilly Media, 2018.