오늘의 인기 글
최근 글
최근 댓글
Today
Total
05-11 00:01
관리 메뉴

우노

[Spark] Spark local mode와 Cluster Manager 및 deploy mode(client, cluster) 본문

Data/Spark

[Spark] Spark local mode와 Cluster Manager 및 deploy mode(client, cluster)

운호(Noah) 2020. 10. 23. 13:35

간단한 Spark 구조 및 용어 설명

  • 하나의 중앙 조정자(master, Driver)와
  • 하나 또는 여러 개의 분산 작업 노드(slave, Executor)로 이루어져있으며,
  • Driver와 Executor를 합쳐서 Spark application이라고 부릅니다.
  • 분산 모드에서는, 하나의 Spark application은 Cluster Manager라고 불리는 외부 서비스를 통해 여러 개의 머신에서 실행됩니다.
  • https://wooono.tistory.com/58?category=914839

Spark local mode와 deploy mode(client, cluster)란?

  • Spark 사용시 Cluster를 사용하는가?
    • Cluster 사용 안한다.
      • Spark local mode
    • Cluster 사용 한다.
      • Cluster Manager로 무엇을 사용할 것인가?
        • Standalone
        • YARN
        • Mesos
      • Cluster Manager의 배포 방식(deploy mode)으로 무엇을 사용할 것인가?
        • client
        • cluster

Spark local mode (스파크 로컬 모드)

  • local mode는 클러스터를 사용하지 않고, 로컬 단일 머신에서 모든 것을 실행하는 형태입니다.

  • Cluster와 Cluster Manager가 없기 때문에, 단일 머신 환경을 구축하거나 간단한 테스트를 할 때 유용합니다.

  • 위 그림처럼, Local Client JVM에 Driver 1개와 Executor 1개를 생성하는 형태입니다.

    • Executor 내부에는 여러 개의 Core를 사용하여 태스크를 병렬로 실행할 수 있습니다.
  • spark-shell, spark-submit을 사용해 로컬 모드를 수행할 때는, --master 매개변수 값을 아래와 같이 설정할 수 있습니다.

    • local

      • 1개의 executor와 1개의 Core로 실행 (local[1])
    • local[N]

      • 1개의 executor와 N개의 Core로 실행
    • local[*]

      • 1개의 executor와 로컬머신이 갖고 있는 만큼의 Core로 실행
    • 수행 예시

          spark-submit --master local[4] --jar sunnytest.jar
  • 위처럼, Spark를 Local(사용자 PC) Thread에서 실행할 수도 있지만, 일반적으로는 Cluster 환경에서 실행됩니다.

  • 이제 Cluster Manager의 종류 및 개념에 대해서 알아보기 전에,

  • 각 Cluster Manager의, 2가지 배포 방식(deploy mode)에 대해 설명하겠습니다.

Cluster Manager의 배포 방식(deploy mode)으로 무엇을 사용할 것인가?

  • 우선, 분산 모드에서 Spark 의 실행구조는 다음과 같습니다.
    • 하나의 중앙 조정자(master, Driver)와 여러 개의 분산 작업 노드(slave, Executor)로 이루어져있으며,
    • Driver와 Executor를 합쳐서 Spark application이라고 부릅니다.
    • 하나의 Spark application은 Cluster Manager라고 불리는 외부 서비스를 통해, 여러 개의 머신에서 실행됩니다.
  • 또한, Spark, Hadoop과 같이, 클러스터 환경에서 동작하는 대부분의 프레임워크는 배포 방식이라는 개념을 가지고 있으며
  • Spark의 배포 방식에는 Client mode와 Cluster mode가 있습니다.
  • 두 가지 mode는 Spark Driver를 어디에서 실행시키느냐 따라 다릅니다.
  • 간단한 설명을 통해 두 가지 mode의 차이점을 살펴 보겠습니다.

deploy mode - Client mode (클라이언트 모드)

  • 위 그림처럼, Client mode는 Spark 실행 시 Driver가 Cluster 외부에서 실행되는 모드를 말합니다.
  • Driver Program과 Spark application은 모두 Client 프로세스에 있습니다.
    • 따라서 Spark Application을 실행했던 콘솔을 닫아 버리거나 기타 다른 방법으로 Client 프로세스를 중지시키면,
    • Spark Context도 함께 종료되면서 수행 중이던 모든 스파크 job이 중지 됩니다.
  • 주로 개발과정에서 대화형 디버깅(spark-shell)을 할 때 사용합니다.
    • 따로 지정하지 않으면 기본으로 선택되는 모드입니다.

deploy mode - Cluster mode (클러스터 모드)

  • 위 그림처럼 Cluster mode는, Driver가 Cluster 내의 Worker 노드 중 하나에서 실행되는 모드를 말합니다.
  • Spark application은 Cluster에서 독립적인 프로세스(Task)들의 집합으로 실행되고
  • 이들은 Driver Program의 Spark Context를 통해 조정됩니다.
    • Spark Context는 몇 가지 타입의 Cluster Manager(어플리케이션 간 리소스를 할당)들에 접속할 수 있습니다.
    • Standalone, Apache Mesos, Hadoop YARN 등
  • Cluster에서 Spark Application을 실행할 때 발생하는 단계
    1. Client는 spark-submit을 사용하여 애플리케이션을 제출한다.
    2. spark-submit은 드라이버 프로그램을 실행하고 사용자가 정의한 main() 메소드를 호출한다.
    3. Driver Program은 Cluster Manager에게 Executor 실행을 위한 리소스를 요청한다.
    4. Cluster Manager는 Driver Program을 대신해 Executor 들을 실행한다.
    5. Driver가 사용자 애플리케이션을 통해 실행된다. 프로그램에 작성된 RDD의 트랜스포메이션과 액션에 기반하여 Driver는 작업 내역을 단위 작업 형태(Task)로 나눠 Executor들에게 보낸다.
    6. 단위 작업들은 결과를 계산하고 저장하기 위해 익스큐터에 의해 실행된다.
    7. 드라이버의 main()이 끝나거나 SparkContext.stop()이 호출된다면 익스큐터들은 중지되고 클러스터 매니저에 사용했던 자원을 반환한다.

Cluster Manager로 무엇을 사용할 것인가?

  • 이제 Cluster Manager의 종류 및 개념에 대해서 알아보겠습니다.
  • Spark는 Cluster를 사용한다면, Cluster의 머신들에 접근할 수 있는 여러 종류의 Cluster Manager 위에서 동작 가능합니다.
  • 만약, 몇 대 정도의 머신 위에서 Spark 자체만 돌린다면, Standalone 모드가 가장 설정하기 쉬운 방법이지만,
  • 다른 분산 애플리케이션과 공유해서 쓰는 클러스터를 사용한다면(예 : 스파크 작업과 하둡 맵리듀스 작업을 같이 운용), Spark는 두 가지 인기 클러스터 매니저(Yarn, Mesos)와도 운영 가능합니다.

Cluster manager - Standalone

  • standalone mode는 Spark 만의 Cluster Manager를 사용하는 모드이며, 간단한 방법을 제공합니다.
  • 하나의 마스터(master)와 여러 개의 작업자(worker)로 구성되며, 각각은 설정에 따른 용량의 메모리와 CPU 코어 개수만큼을 사용합니다.
  • Master는 Cluster Manager의 역할을 담당해서, 클라이언트의 요청을 받아 필요한 서버 자원을 할당하고, Worker의 작업 실행을 관리하는 기능을 수행합니다.
  • Worker는 Executor 와 Task 를 실행해, 데이터에 대한 실제 처리와 저장을 수행합니다.
    • Standalnoe 모드의 경우 Executor는 Worker 노드 하나당 한 개씩 동작합니다.
  • 또한, Standalone은 application을 실행하는 driver가 어디에서 실행되는지에 대해 두 가지의 배포 모드를 지원합니다.
    • Client mode
      • Driver가 spark-submit을 실행하는 머신에서 spark-submit의 일부로 실행됩니다.
      • 이는 드라이버 프로그램의 출력을 직접 확인 가능하며 입력도 가능하다는 뜻이지만(대화형 셸 같은 경우)
      • 애플리케이션을 제출하고, 작업 노드들에 빠른 연결이 가능하며, 애플리케이션 실행 동안 계속 동작 가능한 상태로 있어야 하는 머신이 따로 필요합니다.
    • Cluster mode
      • Driver가 단독 클러스터 내의 Worker들 중 하나에서 별개의 프로세스로 실행됩니다.
      • 이 모드에서 spark-submit은 "실행 후 개입하지 않는 방식"으로 실행되므로 애플리케이션이 실행 중이더라도 사용하던 PC를 꺼 버릴 수 있습니다.
  • spark-shell이나 spark-submit를 사용해 Standalone mode를 수행할 때는 --master 매개변수 값을 아래와 같이 설정할 수 있습니다.
    • spark://host:port
      • standalone 클러스터의 지정 포트 접속

Cluster manager- Hadoop YARN

  • YARN이 클러스터 매니저 역할을 하며 애플리케이션을 실행 및 관리하는 방식입니다.

    • Hadoop YARN은 대개 HDFS와 함께 설치됩니다.
    • 스파크를 YARN 위에서 실행한다면 원하는 데이터가 저장된 HDFS 위에서 스파크가 돌아가게 되므로 유용합니다.
  • YARN 또한 두 가지 배포 모드를 지원합니다.

    • yarn-client

      • 애플리케이션을 제출한 Client 머신(예를 들어, 쓰고 있는 노트북)에서 애플리케이션을 위한 Driver Program이 실행되며
      • Application master는 단순히 NodeManager에게 필요한 자원을 요청하는 역할만 합니다.
      • 주로 개발과정에서 대화형 디버깅을 할 때 의미가 있습니다.
    • yarn-cluster

      • Driver Program이 Cluster의 NodeManager상에서 동작합니다.
      • 순서
        1. Client가 Spark Application을 Resource Manager에게 제출합니다.
        2. Resource Manager는 NodeManager 중 하나를 선정해서 Application master(Driver)를 실행할 컨테이너를 할당하라고 지시합니다.
        3. NodeManager는 Application master(Driver)의 컨테이너를 시작합니다.
        4. Application master(Driver)는 스파크 executor에 사용할 컨테이너들을 리소스 매니저에 추가로 요청합니다.
        5. Resource Manager가 리소스 할당을 ok 하면, Application master(Driver)는 Node Manger에게 컨테이너를 시작하라고 합니다.
        6. NodeManager는 스파크 executor에서 사용할 컨테이너를 시작합니다.
        7. 이제 driver와 executor는 직접 통신하면서 스파크 어플리케이션을 수행합니다.
  • spark-shell이나 spark-submit를 사용해 yarn mode를 수행할 때는 --master 매개변수 값을 아래와 같이 설정할 수 있습니다.

    • yarn-client
      • yarn cluster 접속 ( hadoop directory → HADOOP_CONF_DIR 환경 변수 설정 필요)
    • yarn-cluster
      • yarn cluster 접속 ( hadoop directory → HADOOP_CONF_DIR 환경 변수 설정 필요)
  • 자세한 설명

Comments