본문 바로가기
Big Data/Apache Spark

[Spark] Spark Cluster Manager

by seaweed_one 2022. 12. 16.
728x90

Stand Alone

spark 에서 자체적으로 제공하는 기능입니다.

클러스터 매니저로 각 노드에서 하나의 *익스큐터만 실행 가능한데요.

클러스터 매니저와 스파크 콘텍스트가 연결되면 각 클러스터 내부의 워커 노드에서 익스큐터를 얻게 되며 스파크만 돌릴 경우 다른 클러스터 매니저들이 제공하는 거의 모든 기능을 제공합니다.

stand alone 클러스터 모드는 현재 애플리케이션 전체에서 간단한 FIFO 스케줄러만 지원하지만 동시 사용자를 설정하려면 각 응용프로그램에서 사용할 최대 리소스 수 설정이 가능하지만 기본 설정으로 사용할 시 클러스터의 모든 코어를 사용함으로 하나의 애플리케이션만 실행하는 것이 합리적입니다.

스케줄러는 마스터를 사용해 스케줄링 결정을 내리고 이는 단일 실패 지점을 생성하는데요

여기서 단일 장애점(single point of failure, SPOF)은 시스템 구성 요소 중에서, 동작하지 않으면 전체 시스템이 중단되는 요소를 뜻합니다. 이를 방지하기 위해 HA설정이 필요할 수 있으며 HA 설정에는 아래와 같은 두 가지 방법이 존재합니다.

Yarn Deploy mode & Stand Alone Mode

HA설정

Zookeeper 를 이용한 고가용성

하나는 리더로 선출되고 나머지는 대기모드로 유지되며, 현재 리더 사망 시 다른 마스터가 선출되어 이전 마스터의 상태를 복구해 일정을 시작합니다.

쥬키퍼를 사용해 리더 선출 및 일부 상태 스토리지를 제공하면 동일한 주키퍼 인스턴스에 연결된 클러스터에서 여러 마스터를 시작할 수 있습니다.

 

파일 시스템을 이용한 고가용성

응용프로그램과 등록 시 제공된 디렉터리에 상태를 충분히 기록하여 마스터 프로세스 재시작 시 복구가 가능합니다.

실행 위치에 따라 클라이언트 모드와 클러스터 모드를 지원하는데요. 쥬키퍼를 사용하는 것이 가장 이상적이지만 마스터가 다운된 경우 마스터를 재시작할 수 있도록 하는 경우 파일 시스템 모드에서 처리가 가능합니다.

실행 위치에 따라 클라이언트 모드와 클러스터 모드를 지원합니다.

 

DepolyMode

Stand Alone Cluster mode

Driver가 단독 클러스터 내의 Worker들 중 하나에서 별개의 프로세스로 실행됩니다.

이 모드에서 spark-submit은 "실행 후 개입하지 않는 방식"으로 실행되므로 애플리케이션이 실행 중이더라도 사용하던 PC 종료가 가능합니다.

 

Stand Alone Client mode

Driver가 spark-submit을 실행하는 머신에서 spark-submit의 일부로 실행합니다.

드라이버를 클라이언트 모드로 실행하는 경우에 유저는 spark.driver.resourcesFile 등의 명령어를 통해 사용하는 리소스를 설정 가능합니다.

 

 

Yarn

하둡의 클러스터 매니저입니다.

작업 스케줄링과 리소스 할당 등의 자원 관리, 분산자원 관리를 담당하며 다른 애플리케이션들과 함께 돌리거나 더 우수한 자원 스케줄링이 필요한 경우에 사용합니다.

Spark on Yarn에서 스파크 익스큐터는 yarn container 로서 동작하며 spark on yarn을 사용하기 위해서는 아래와 같은 절차가 필요합니다.

  • HADOOP_CONF_DIR이라는 환경변수에 하둡 설정
  • 파일 디렉터리를 등록
  • (일반적으로는 HADOOP_HOME/conf 폴더)
  • spark-submit 제출
  • 제출 시 --master의 파라미터를 yarn으로 --deploy-mode cluster로 설정하여 제출

DepolyMode

YARN Cluster Mode

yarn이 클러스터 매니저 역할을 하며 애플리케이션을 실행 및 관리하는 방식으로 Spark on Yarn은 데이터가 저장된 hdfs 위에서 스파크가 돌아감으로 유용합니다.

 

스파크 애플리케이션이 YARN에서 실행되면 Application Master 프로세스 생성되는데요. 

Yarn Application Master는 Scheduler로부터 적절한 Container를 할당받고, 프로그램의 실행 상태를 모니터링, 관리합니다.

Application 하나당 하나의 Application Master를 갖게 되는데 애플리케이션 마스터는 스파크 드라이버를 실행하는 컨테이너가 됩니다.

Application Master 가 드라이버의 역할과 리소스 매니저에게 리소스 요청의 역할을 수행하며 이 둘을 같은 프로세스가 실행하는 구조로 Spark Driver가 YARN의 리소스 매니저와 협상하여 이 Application을 실행하기 위한 리소스를 받아내고 이 프로세스는 Yarn Container(Task의 실행 단위. Container는 리소스 매니저가 할당한 시스템 자원을 활용 가능) 안에서 실행되고 App을 시작하는 것으로 클라이언트의 역할은 종료됩니다.

리소스를 받아내면 YARN 노드 매니저(Node Manager)에게 Spark Executor를 실행하기 위한 컨테이너를 생성하도록 지시하고 Spark Executor가 태스크들을 할당받아 실제로 태스크를 수행하는데 드라이버가 yarn 컨테이너로 동작하기 때문에 드라이버 장애 발생 시 다른 노드에서 드라이버가 재실행될 수 있습니다.

 

YARN Client Mode

클라이언트 모드는 애플리케이션을 제출한 머신에서 드라이버 프로그램이 실행됩니다.

주로 개발과정에서 대화형으로 사용하기에 적합하고 user input 이 필요한 스파크 쉘 프로그램 등은 클라이언트 프로세스에서 실행되는 것이 적절합니다.

 

K8S

기본 컨테이너화, Docker 지원하는 클러스터 매니저입니다.

스파크 애플리케이션을 완전히 분리하여 실행이 가능하다는 장점을 가집니다.

Doker Container사용 시 스파크의 안정성과 비용 효율성이 상승되기 때문이며 spark-submit을 이용해 Spark 애플리케이션을 kubernetes에 제출이 가능합니다.

 

도커 컨테이너는 다양한 프로그램 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램 배포 및 관리를 단순화하고 Kubernetes는 클러스터 모드에서 spark-submit CLI 도구를 통해 간단한 애플리케이션 관리를 제공합니다.

 

Mesos

Mesos 사용 시 Mesos Master는 Spark Master를 대체합니다.

Client mode에서 드라이버는 애플리케이션을 제출한 머신에서 실행되며 Cluster mode로 실행하고 싶다면 오로라 같은 다른 프레임 워크를 사용해 실행이 가능합니다.

다른 클러스터 매니저와 달리 메소스는 동일 클러스터 내에서 자원을 공유할 수 있는 두 가지 모드를 지원하는데 그 두 가지는 아래와 같습니다.

 

fine-grainged ( 세밀한 모드 )

기본으로 실행되는 모드입니다.

세밀한 모드는 다중 사용자 모드에서 셸 같은 대화형 작업들이 클러스터를 공유 시 특히 매력적인데 , 그 이유는 아무것도 하지 않을 경우 애플리케이션은 알아서 사용 코어 수를 줄여주기 때문. 하지만 스케줄링되는 작업들의 응답성이 나빠진다는 단점이 존재합니다. (스파크 스트리밍같이 빠른 응답성을 요구하는 애플리케이션에게는 적절치 않을 수 있음)

실행하는 작업들에 따라 익스큐터가 메소스에 요청하는 cpu 개수를 조정하므로 여러 개의 익스큐터를 한 머신에서 실행하더라도 익스큐터들 사이에 동적으로 자원 공유가 가능합니다.

 

coarse-grained ( 거친 모드 )

각 익스큐터에 고정된 개수의 *cpu를 할당.*cpu : center process unit , 중앙처리장치 명령어의 해석 및 자료의 연산 비교 등의 처리를 제어하는 컴퓨터 시스템의 핵심 장치로 다양한 입력 장치로부터 자료를 받아 처리한 뒤 그 결과를 출력장치로 보내는 일련의 과정을 제어하고 조정합니다.

애플리케이션 종료 전까지 익스큐터가 아무 일을 하지 않을 때도 절대 반환하지 않습니다.

 

728x90

'Big Data > Apache Spark' 카테고리의 다른 글

[Spark] Spark Streaming 의 종류 (DStream, Structured Streaming)  (0) 2023.01.07
[Spark] Spark Streaming 이란?  (0) 2022.12.21
[Spark] Spark Deploy Mode  (0) 2022.12.16
[Spark] Spark Job  (0) 2022.12.15
[Spark] Spark Evalution  (0) 2022.12.13