Spark?

  • Hadoop과 유사한 클러스터 기반의 분산처리 기능을 제공하는 오픈소스 프레임워크
    • 빅데이터 분산처리 플랫폼 / 엔진
  • In-Memory기반으로 처리하기 때문에 반복적인 데이터 처리, 즉 ML 과 같은 것에 뛰어난 성능을 보인다.

Spark Application

  • 제출한 Job을 Task로 변환하여 Executor에게 분산 처리함

Driver

  • 스파크에서 Job을 수행하는 프로그램
    • Main함수를 수행하는 프로그램
    • SparkContext를 생성하고 해당 Instance를 포함한 프로그램
  • Cluster모드에 따라 다른 위치에서 수행되지만 대체로 실행 서버에서 구동.
  • Worker 노드에 작업을 시키고, 결과를 취합한다

Worker

  • 작업을 하는 노드
  • Executor가 동작하는 노드
    • 작업을 수행하는 프로세스
    • Partition 단위로 Job을 수행
    • 1개의 Worker 노드에 N개의 Executor가 동작할 수 있다

Application

  • Spark 위에서 구동되는 프로그램
    • Driver
      • Spark Application을 실행하는 프로세스
      • Spark Context를 생성
      • Spark Application Life cycle 관리
    • Executor
      • Task 실행을 담당
      • 실행 결과를 Driver에게 전달

Cluster Manager

  • 이름 그대로 cluster를 관리하는 매니져
  • cluster mode 종류
    • Yarn
      • Hadoop Cluster Manager
      • Resource Manager / Node Manager로 구성
    • Memos
      • Apache Cluster Manager
      • Master /Slave 구성
    • StandAlone
      • Spark 자체 제공 Cluster Manager
      • 1 Node 1 Executor만 가능
  • deploy mode
    • client
      • Driver Program을 submit한 곳에서 실행
        • 즉 Client Server에서 Driver을 실행
    • cluster
      • Driver Program을 cluster중 무작위 실행
        • 즉 Client Server이외의 worker Node에서 Driver을 실행

Job

  • Spark Application에 제출된 작업
  • N개의 Task로 구성된 병렬 연산 단위
    • Spark Application은 N+1개의 Job으로 구성됨
  • 각 Job은 DAG로 변환된다
  • Dag에서 각각의 Job Node들은 하나 이상의 Spark Stage에 포함됨

Stage

  • N+1개의 Task의 집합
  • 병렬/순차 적으로 수행될 수 있는 작업을 기반으로 생성됨

Task

  • Executor에서 구동하는 최소 실행 단위

실행 순서

Pasted image 20231004170237.png

  • 간단히 보면 위와 같은 방식으로 Job 1 안에 Stage들을 순차적으로 처리 완료 후 job 2를 수 행한다.
  • 처리 순서
    1. SparkContext를 이용하여 RDD연산 정보를 DAG Scheduler에게 전달
    2. DAG를 생성하면, 해당 DAG를 Cluster Manager에게 전달
    3. 이때 Scheduler는 최대한 locality를 높여 stage를 구성
    4. 생성된 DAG를 수행

데이터 구조

  1. Spark_RDD
  2. DataFrame
  3. DataSet

사용 언어

  1. Java
  2. Scala
  3. R
  4. Python

HA

Spark 또한 Master - Slave 구성으로 되어 있기 때문에 HA구성을 만드는 것이 좋다
만약 HA구성을 하지 않으면 SPOF 위험이 생긴다.
구성 시 Zookeeper 등을 이용하여 사용한다

  • 기본 설정
    • SPARK_DAEMON_JAVA_OPTS에 아래 변수들을 추가한다
      • spark.deploy.recoveryMode=ZOOKEEPER
      • spark.deploy.zookeeper.url=
      • spark.deploy.zookeeper.dir=
        • 기본값 : /spark
    • spark-env.sh에 아래와 같이 추가
      • export SPARK_DAEMON_JAVA_OPTS=“-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url={zookeeper url} -Dspark.deploy.zookeeper.dir={zookeeper에서 저장할 경로}”
  • HA구성 하지 않고 단일 복구 모드를 사용하고 싶다면 아래와 같이 하면된다
    • spark-env.sh에 아래와 같이 추가
      - export SPARK_DAEMON_JAVA_OPTS=“-Dspark.deploy.recoveryMode=FILESYSTEM -Dspark.deploy.recoveryDirectory={복구 데이터 경로}”

History Server

Spark의 동작을 확인할 수 있는 Web Server

  • Event Log를 확인 할 수 있다
  • HDSF를 사용한다면 아래와 같이 spark-defaults.conf 에 추가하여 후 start-history-server.sh를 실행하여 구동시켜 사용하면 된다.
spark.eventLog.enabled true // 이벤트로그 저장 여부
spark.eventLog.dir hdfs:///spark-history //이벤트 로그 저장
spark.history.fs.logDirectory hdfs:///spark-history // 종료된 App 로그 저장

보유 기능

  1. SparkStreaming
  2. SparkSQL
  3. SparkMLib
  4. SparkGraphx

[ Reference ]


개인적으로 공부한 내용 포스팅 중
잘못된 정보는 지적해주시면 좋겠습니다!

'프로그래밍 및 IT > Spark' 카테고리의 다른 글

spark-scheduling  (0) 2023.11.28
WordCount  (0) 2023.10.13
RDD Action  (0) 2023.10.13
RDD Transformation  (0) 2023.10.13
Spark_RDD  (0) 2023.10.05

+ Recent posts