[Apache Spark] 스파크 배포 환경

연수·2021년 12월 10일
0

spark

목록 보기
21/26

1️⃣ 클러스터 환경

🫐 설치형 클러스터 (on-premise)

  • 장점
    • 자체 데이터센터를 운영하는 조직에 적합하다.
    • 사용 중인 하드웨어를 완전히 제어할 수 있으므로 특정 워크로드의 성능을 최적화할 수 있다.
    • 여러 종류의 저장소를 선택할 수 있다.
  • 단점
    • 설치형 클러스터의 크기가 제한적이다. (너무 작거나 너무 클 수 있음)
    • 하둡 파일 시스템(HDFS)이나 키-값 저장소 같은 자체 저장소 시스템을 선택하고 운영해야 한다.
  • 설치형 클러스터의 자원 활용 문제를 해결할 수 있는 가장 좋은 방법은 클러스터 매니저를 사용하는 것이다. → 다수의 스파크 애플리케이션을 실행할 수 있고 자원을 동적으로 재할당할 수 있다.

 

☁️ 클라우드 배포 환경 (public cloud)

  • 장점
    • 자원을 탄력적으로 늘이고 줄이는 것이 가능하다.
    • 애플리케이션마다 다른 유형의 머신과 클러스터 규모를 선택할 수 있다.
    • 비용이 저렴하고 지리적 복제 기능을 지원하는 저장소를 제공하기 때문에 대규모 데이터를 쉽게 관리할 수 있다.
  • 클라우드에서 클러스터와 분리된 글로벌 저장소 시스템을 사용하고 스파크 워크로드마다 별도의 클러스터를 동적으로 할당하는 것이 좋다.
  • 연산 클러스터와 저장소 클러스터를 분리하면 연산이 필요한 경우에만 클러스터 비용을 지불하면 되며, 동적으로 크기를 조절할 수 있어 하드웨어 종류가 다른 클러스터를 섞어가며 사용할 수 있다.
  • 클라우드 저장소를 연동해 스파크를 실행하면 클라우드의 유연성과 비용 절감 효과, 관리 도구 등 다양한 장점을 활용할 수 있다.

 

2️⃣ 클러스터 매니저

🙌 스탠드얼론 모드

  • 하나의 클러스터에서 다수의 스파크 애플리케이션을 실행할 수 있다.
  • 실행을 위한 간단한 인터페이스를 제공하며 대형 스파크 워크로드로 확장할 수 있다.
  • 다른 클러스터 매니저에 비해 제한적인 기능을 가지며, 스파크 애플리케이션만 실행할 수 있다는 단점이 있다.
  • 클러스터 환경을 빠르게 구축해 스파크 애플리케이션을 실행해야 할 때 사용할 수 있다.
  • 시작 스크립트를 설정해 스탠드얼론 클러스터의 시작을 자동화할 수 있다.

 

🧶 YARN

  • 잡 스케줄링과 클러스터 자원 관리용 프레임워크
  • 스파크는 하둡 YARN 클러스터 매니저를 지원하지만 하둡 자체가 필요한 것은 아니다.
  • spark-submit 명령의 --master 인수를 yarn으로 지정해 YARN 클러스터에서 스파크 잡을 실행할 수 있다.
  • 클러스터 동작 방식을 제어할 수 있는 여러 기능을 제공하며, 다양한 실행 프레임워크를 진행하는 통합 스케줄러이다.
  • 스파크를 이용해 HDFS 파일을 읽고 쓰려면 스파크 클래스패스에 두 개의 하둡 설정 파일을 포함시켜야 한다.
    • hdfs-site.xml: HDFS 클라이언트의 동작 방식을 결정
    • core-site.xml: 기본 파일 시스템의 이름을 설정

 

🐻‍❄️ 아파치 메소스

  • 아파치 메소스는 CPU, 메모리, 저장소, 그리고 다른 연산 자원을 머신에서 추상화한다. 이를 통해 내고장성 및 탄력적 분산 시스템을 쉽게 구성하고 효과적으로 실행할 수 있다.
  • 대규모의 메소스 배포 환경이 있는 경우 사용하는 것이 좋다.
  • 스파크처럼 짧게 실행되는 애플리케이션과 오래 실행되는 애플리케이션 모두 관리할 수 있다.
  • 두 가지 모드로 스파크를 실행할 수 있다.
    • fine-grained (현재는 지원 X)
    • coarse-grained
  • 스파크 익스큐터는 다음과 같은 애플리케이션 속성에 따라 크기가 조절된다.
    • spark.executor.memory
    • spark.executor.cores
    • spark.cores.max / spark.executor.cores
  • 메소스를 사용할 때는 cluster 모드 방식이 가장 좋다. (client 모드는 분산 자원 관리 관련 추가 설정이 필요)

🔐 보안 관련 설정

  • 스파크는 신뢰도가 낮은 환경에서 애플리케이션을 안전하게 실행할 수 있도록 저수준 API 기능을 제공한다.
  • 스파크 외부의 실행 환경과 관련 있다.
  • 보안 관련 설정에서는 인증, 네트워크 구간 암호화, TLS, SSL을 설정할 수 있다. (주로 통신 방식)

🐑 클러스터 네트워크 설정

  • 클러스터 노드 사이에서 proxy를 사용하기 위해 스파크 클러스터에 사용자 정의 배포 설정을 적용하는 경우 도움이 된다.
  • 스파크 성능을 높이고 싶다면 사용자가 정의한 배포 시나리오에 맞게 적용해야 한다.

⏰ 애플리케이션 스케줄링

  • 각 스파크 애플리케이션은 독립적인 익스큐터 프로세스를 실행한다. 클러스터 매니저는 스파크 애플리케이션 전체에 대한 스케줄링 기능을 제공한다.
  • 스파크 애플리케이션에서 여러 개의 잡(즉, 스파크 액션)을 다른 스레드가 제출한 경우 동시에 실행할 수 있다. → 페어 스케줄러로 스파크 자원 스케줄링 가능
  • 동적 할당 기능을 이용하면 대기 중인 태스크 수에 따라 애플리케이션을 동적으로 확장하고 축소할 수 있다.

 

3️⃣ 기타 고려사항

  • 애플리케이션의 개수와 유형
  • 다양한 스파크 버전
  • 애플리케이션 디버깅에 필요한 로그를 기록하는 방식
  • 테이블 카탈로그 같은 저장된 데이터셋의 메타데이터를 관리하기 위해 메타스토어 사용을 고려해야 함
  • 외부 셔플 서비스
  • 모니터링 솔루션

 

[출처] 스파크 완벽 가이드 (빌 체임버스, 마테이 자하리아 지음)

profile
DCDI

0개의 댓글