Spark 프로그램 실행 환경

  1. 개발/테스트/학습 환경 (Interactive Clients):**
       - **노트북 (주피터, 제플린):** 주피터 노트북이나 제플린과 같은 대화형 노트북 환경에서 Spark 코드를 작성하고 실행할 수 있습니다. 이는 데이터 탐색, 실험 및 작은 규모의 작업에 유용합니다.
       - **Spark Shell:** Spark의 REPL(Read-Eval-Print Loop) 환경으로, 쉘에서 실시간으로 Spark 코드를 작성하고 실행할 수 있습니다.

  2. 프로덕션 환경 (Submit Job):**
       - **spark-submit (command-line utility):** 가장 일반적인 방법으로, Spark 애플리케이션을 제출하여 클러스터에서 실행합니다. 대규모의 프로덕션 운영에 적합합니다.
       - **데이터브릭스 노트북:** 노트북 코드를 주기적으로 실행할 수 있는 기능을 제공하며, 머신 러닝 파이프라인의 일부로 사용될 수 있습니다.
       - **REST API:** Spark Standalone 모드에서만 가능하며, API를 통해 Spark 작업을 실행할 수 있습니다. 실행 코드는 미리 HDFS 등의 파일 시스템에 적재되어 있어야 합니다.

Spark 프로그램의 구조

  1. Driver:**
       - **역할:** Spark 프로그램을 실행하고 제어하는 메인 프로세스로, 실행되는 코드의 마스터 역할을 수행합니다.
       - **기능:**
         - 클러스터에서 애플리케이션의 메인 논리를 실행하고 제어합니다.
         - 작업 스케줄링, 태스크 분배, 데이터 분산, 결과 수집 등을 담당합니다.
         - 클러스터 매니저 (예: YARN)에서 실행 중인 Application Master와 유사한 역할을 합니다.

  2. Executor:**
       - **역할:** 실제로 태스크를 실행하고 데이터를 처리하는 역할을 수행하는 프로세스입니다.
       - **기능:**
         - 드라이버로부터 할당받은 태스크를 수행합니다.
         - 태스크의 실행 과정에서 데이터를 메모리에 캐시하고, 중간 결과를 저장합니다.
         - 드라이버에게 결과를 보고하고, 새로운 태스크를 할당받을 준비를 합니다.
         - 클러스터 매니저에서 실행 중인 컨테이너에 해당합니다. (예: YARN의 컨테이너)

    이러한 구조에서 드라이버는 클러스터의 메인 노드에서 실행되며, 여러 개의 익스큐터가 클러스터의 워커 노드에서 병렬로 동작합니다. 드라이버와 익스큐터 간의 통신은 네트워크를 통해 이루어집니다. Spark 애플리케이션이 실행되면 드라이버와 익스큐터는 클러스터 매니저에 의해 할당되어 동작하게 됩니다.

 

Spark 프로그램의 구조 더 자세히

  1. Driver:**
    - **사용자 코드 실행 및 실행 모드에 따른 위치:**
      - 드라이버는 사용자 코드를 실행하며, 실행 모드에 따라 클라이언트 모드에서는 사용자의 로컬 머신에서 실행되고, 클러스터 모드에서는 클러스터의 매니저에서 실행됩니다.

    - **리소스 지정:**
      - 사용자 코드를 실행하는데 필요한 리소스를 지정합니다. 예를 들어, `--num-executors`, `--executor-cores`, `--executor-memory`와 같은 설정을 통해 익스큐터의 개수와 각 익스큐터의 자원을 지정할 수 있습니다.

    - **SparkSession 생성 및 클러스터 통신:**
      - SparkSession을 만들어 Spark 클러스터와 통신을 수행합니다.
      - 클러스터 매니저(예: YARN의 Resource Manager)와 통신하여 클러스터 리소스를 할당받습니다.
      - Executor(예: YARN의 Container)를 클러스터에 요청하고 관리합니다.

    - **사용자 코드 변환 및 실행:**
      - 사용자 코드를 Spark 태스크로 변환하고 클러스터에서 실행합니다.
      - 클러스터 매니저를 통해 익스큐터를 할당하고, 사용자 코드를 익스큐터에서 실행합니다.

  2. Executor:**
    - **실제 태스크 실행 역할(jvm: Java Virtual Machine):**
      - 익스큐터는 드라이버로부터 할당받은 태스크를 실행하는 역할을 수행합니다.
      - Transformations과 Actions 단계에서 작업을 수행하며, 데이터를 처리하고 중간 결과를 저장합니다.

    - **YARN에서의 Container:**
      - YARN 환경에서는 익스큐터가 클러스터에서 실행되는데, 이때는 YARN의 컨테이너가 해당 역할을 수행합니다.

    드라이버와 익스큐터 간의 통신은 SparkSession을 통해 이루어지며, 사용자 코드는 클러스터 환경에서 분산되어 실행됩니다.

Spark 클러스터 매니저 옵션

  1. **local[n]:**
    - **설명:** 로컬 환경에서 개발 및 테스트 목적으로 사용되는 Spark 클러스터 매니저 옵션입니다. 주로 Spark Shell, 통합 개발 환경(IDE), 노트북 등에서 활용됩니다.
    - **특징:**
      - 하나의 JVM이 클러스터로 동작하며, Driver와 하나의 Executor가 실행됩니다.
      - `n`은 코어의 수를 나타내며, Executor의 스레드 수가 됩니다.
      - 예를 들어, `local[4]`는 4개의 코어를 사용하여 동작하며, 이는 Executor가 4개의 스레드를 갖는다는 것을 의미합니다.
      - `local[*]`는 컴퓨터에 있는 모든 코어를 사용하여 동작함을 나타냅니다.

    **용도:**
    - 작은 규모의 데이터나 단일 머신에서의 테스트 및 개발 시에 활용됩니다.
    - 병렬 처리가 필요한데 클러스터 구성이나 대규모 데이터가 필요하지 않은 경우에 유용합니다.
    - 스레드 수를 조절하여 성능 튜닝이 가능하며, 단일 머신의 자원을 최대한 활용할 수 있습니다.
  2. YARN:
    • 두 가지 실행 모드: YARN 환경에서 Spark 애플리케이션을 실행할 때는 두 가지 실행 모드를 선택할 수 있습니다: Client 모드와 Cluster 모드.
    Client 모드:
    • 설명: Spark 애플리케이션의 Driver가 Spark 클러스터 외부에서 동작하는 모드입니다.
    • 용도:
      • YARN 기반 Spark 클러스터를 기반으로 개발 및 테스트를 수행할 때 사용됩니다.
      • 개발자가 로컬 머신에서 애플리케이션을 실행하고, 클러스터 리소스를 활용하는 방식으로 사용됩니다.
    Cluster 모드:
    • 설명: Spark 애플리케이션의 Driver가 Spark 클러스터 내부에서 동작하는 모드입니다.
    • 특징:
      • 하나의 YARN Container 슬롯을 차지하며, 클러스터 내부에서 실행됩니다.
      • 실제 프로덕션 운영에 사용되는 모드로, 클러스터의 리소스를 효과적으로 활용할 수 있습니다.
    용도:
    • 클러스터에서 대규모의 데이터를 처리하거나 실제 운영 환경에서 Spark 애플리케이션을 실행할 때 사용됩니다.
    • 리소스 매니저에 의해 할당된 컨테이너 내에서 애플리케이션이 실행되므로 클러스터의 전체 자원을 효과적으로 활용할 수 있습니다.

  3. **Kubernetes:**
    - **설명:** Kubernetes 컨테이너 오케스트레이션 플랫폼을 사용하는 클러스터 매니저 옵션으로, 컨테이너화된 Spark 애플리케이션을 실행합니다.
    - **용도:** 컨테이너 기반의 마이크로서비스 아키텍처에서 Spark 애플리케이션을 실행하거나, Kubernetes를 활용한 클러스터 관리가 필요한 경우 사용됩니다.

  4. **Mesos:**
    - **설명:** Apache Mesos를 클러스터 매니저로 사용하는 옵션으로, 자원 관리 및 분산 시스템에서 Spark 애플리케이션을 실행합니다.
    - **용도:** Mesos 클러스터에서 Spark를 실행하거나, Mesos를 활용하여 리소스 동적 할당이 필요한 경우 사용됨

  5. **Standalone:**
    - **설명:** Spark 자체적으로 제공하는 클러스터 매니저로, 스파크가 내부적으로 클러스터 매니징을 수행하는 옵션
    - **용도:** 작은 규모의 클러스터에서 간단한 분산 처리를 위해 Spark 자체적인 클러스터 매니저를 사용할 때 사용됨

요약

  1. 하둡 등장:** 빅데이터 처리를 위해 오픈소스인 하둡이 등장하였으며, 이는 분산 파일 시스템과 분산 컴퓨팅 시스템으로 구성되어 있습니다. 주요 구성 요소로는 HDFS와 맵리듀스/YARN이 있습니다.

  2. 맵리듀스 제약:** 맵리듀스 프로그래밍의 제약으로 SQL이 다시 부각되었습니다.

  3. Spark 대세:** Spark는 대용량 데이터 분산 컴퓨팅 기술로, Pandas와 Scikit Learn의 스테로이드 버전이라 할 수 있습니다. 또한, SQL과 스트림 데이터, 그래프 처리도 제공하며 현재 대세로 자리 잡고 있습니다.

 

'하둡,spark' 카테고리의 다른 글

spark 데이터 구조  (0) 2024.01.19
spark 데이터 처리  (0) 2024.01.18
spark 기초  (0) 2024.01.18
맵리듀스(MapReduce) 문제점  (0) 2024.01.18
하둡 설치 +맵리듀스(wordcount) 실습  (0) 2024.01.18

+ Recent posts