오늘의 인기 글
최근 글
최근 댓글
Today
Total
04-30 00:02
관리 메뉴

우노

[Spark] Spark 구조 및 실행 흐름 본문

Data/Spark

[Spark] Spark 구조 및 실행 흐름

운호(Noah) 2020. 7. 15. 17:34

Spark 구조

  • 분산모드에서 Spark Application실제 일을 수행하는 역할을 담당하며
  • 1개의 중앙 조정자(Driver)N개의 분산 작업 노드(Executor)구성된 마스터/슬레이브 구조입니다.
  • Cluster에서 실행 된다면, 하나의 Spark applicationCluster Manager라고 불리는 외부 서비스를 사용해 여러 개의 머신에서 실행 됩니다.
    • Cluster Manager에는 standalone(단독 클러스터 매니저), YARN, Mesos 등이 있습니다.

Spark 구성 요소

  • Spark Application

    • Spark에서 수행되는 사용자 프로그램으로
    • 1개의 Driver Program과 N개의 Executor로 구성
  • Driver Program

    • 프로그램의 Main() 함수가 실행되는 프로세스

      • 주요 역할

        • 1) 사용자 프로그램을 실제 수행 단위인 Task로 변환 해 Executor에 할당

          • 1-1) 연산들의 관계에 대해 논리적인 방향성 비순환 그래프(DAG, Directed Acyclic Graph)를 생성한다.
            • 입력으로부터 RDD를 만들고
            • 트랜스포메이션을 사용하여 새로운 RDD를 받아오며
            • 데이터를 가져오거나 저장하기 위해 액션을 사용한다.
          • 1-2) Driver가 실행될 때, Driver는 논리 그래프(DAG)를 물리적인 실행 계획(Physical Plan)으로 변환한다.
            • Driver는 Map/Tranformation을 사용한 여러 최적화를 통해, 물리적인 실행 계획을 여러 단계(Stage)로 바꾼다.
            • 각 Stage는 순서에 따라 여러 개의 Task로 구성된다.
          • 1-3) 단위 작업들은 묶여서 Cluster로 전송된다.
            • Task의 묶음은 Stage이며 Stage의 묶음은 Job이다.
        • 2) Executor에 할당 된 Task들을 적절하게 Scheduling

          • 2-1) Executor들은 시작 시 드라이버에 등록됨
          • 2-2) Driver는 항상 실행중인 익스큐터를 감시
            • 각 Task가 데이터 위치에 기반해 적절한 위치에서 실행이 되도록 한다.
  • SparkContext

    • Driver Program에서 Job을 Executor에 실행하기 위한 Endpoint이다.
    • Cluster Manager와 연결된다.
  • Executor

    • Application에서 Driver Program이 요청한 Task들의 연산을 실제로 수행하는 프로세스
    • Executor는 Spark application 실행 시 최초 한번 실행된다.
      • 대개 애플리케이션이 끝날 때까지 계속 동작하지만, 익스큐터가 오류로 죽더라도 스파크 애플리케이션은 계속 실행된다.
    • Executor는 두가지 역할을 한다.
      • 첫 번째로, Application을 구성하는 작업들을 실행하여 Driver Program에 그 결과를 되돌려 준다.
      • 두 번째로, 각 Executor 안에 존재하는 Block Manager라는 서비스를 통해 사용자 프로그램에서 cache 하는 RDD를 저장하기 위한 메모리 저장소를 제공한다.
        • RDD가 Executor 내부에 직접 캐시되므로 단위 작업들 또한 같이 실행되기에 용이하다.
  • Cluster Manager

    • Cluster Manager는 여러 대의 서버로 구성된 클러스터 환경에서, 다수의 Application이 함께 구동될 수 있도록
    • Application(Driver와 Executor) 사이의 자원을 관리해주는 역할을 담당합니다.
    • 스파크와 붙이거나 뗄 수 있는(pluggable) 컴포넌트이며
    • Spark가 YANR, mesos, Standalone 등 다양한 외부 매니저들 위에서도 돌아갈 수 있게 합니다.
  • Deploy mode : Cluster 사용 시 Driver Program의 실행 위치 지정

    • Client mode : Driver가 Cluster 외부에 위치할 때

      • Driver는 spark-submit의 일부로 실행됨
      • Driver Program 출력을 직접 확인 가능
      • 애플리케이션 실행하는 동안 작업 노드 들에 계속 연결되어 있어야함
    • Cluster mode : Driver가 Cluster 내부에 위치할 때

      • Driver가 Cluster내의 작업 노드(Worker) 중 하나에서 실행됨
      • 실행 후 개입하지 않는 방식
  • Master Node

    • Worker를 관리하는 노드
  • Worker node

    • Cluster에서 Application 코드를 실행할 수 있는 모든 노드
  • Task

    • 하나의 Executor에서 수행되는 최소 작업 단위
  • Stage

    • Task의 집합
  • Job

    • Stage의 집합
    • Application에서 Spark에 요청하는 일련의 작업

Cluster에서 Spark Application 실행 흐름

  • 1) 사용자는 spark-submit을 사용하여 애플리케이션을 제출한다.
  • 2) spark-submit은 드라이버 프로그램을 실행하고 사용자가 정의한 main() 메소드를 호출한다.
    • SparkContext도 생성 되어 Cluster Manager와 연결 됨
  • 3) Driver Program은 Cluster Manager에게 Executor 실행을 위한 리소스를 요청한다.
  • 4) Cluster Manager는 Driver에게 요청 받은 리소스 만큼 Executor 자원을 할당한 후 실행한다.
    • Executor 실행은 Cluster Manager, Task 할당은 Driver
  • 5) Driver를 통해 사용자 애플리케이션이 실행된다.
    • DAG Schedling을 통해 드라이버는 작업을 Task 단위로 분할하여 Executor에게 보낸다.
  • 6) Executor들은 단위 작업(Task)들을 계산해 Driver Program에게 다시 보낸다.
  • 7) 드라이버의 main()이 끝나거나 SparkContext.stop()이 호출된다면 익스큐터들은 중지되고 클러스터 매니저에 사용했던 자원을 반환한다.
Comments