티스토리 뷰

Spark 2.4.0 기준으로 문서 작성하였으니 참고하시기 바랍니다 ^^

Apache Spark란?

Apache Spark™ is a unified analytics engine for large-scale data processing.

특징

Speed

  • DAG scheduler, query optimizer 등을 사용하여 빠른 데이터 처리 속도를 제공
  • In‑Memory 컴퓨팅 (물론 Disk기반도 가능)
  • Hadoop보다 100배나 빠르다고 주장함

Ease of Use

  • Java, Scala, Python, R, SQL 등의 언어를 사용하여 분산 처리 어플리케이션을 빠르게 만들 수 있음

Generality(범용성)

  • Spark이 제공하는 SQL과 DataFrames, MLlib(머신러닝), GraphX, Spark Streaming 등의 라이브러리들을 하나의 어플리케이션에서 완벽하게 조합하여 사용할 수 있음

Runs Everywhere

  • Spark 실행환경
    standalone cluster mode를 기본적으로 사용할 수 있고, EC2, Hadoop, YARN, Apache Mesos, Kubernetes 등을 활용하여 실행 가능함
  • Data Sources
    HDFS, Alluxio, Apache Cassandra, Apache HBase, Apache Hive 등 수많은 Data Sources에 접근 가능함

무엇을 할 수 있나?

  • 대용량 데이터를 실시간 혹은 배치로 ETL(Extract, Transform, Load), 분석, 머신러닝, 그래프 처리 등을 할 수 있음
  • 데이터 양이 많으면서 다양한 형태의 데이터를 분석해야 할 경우 Spark을 사용하기 매우 적합함
    (단순히 oracle db의 데이터를 분석할꺼면 그냥 쿼리를 사용해 분석하면 됨)

Cluster Mode Overview

Spark을 Local(사용자 PC) Thread에서 실행할 수도 있지만 Cluster 환경에서 실행하는 것이 일반적임

구성요소

  • Spark 어플리케이션은 Cluster에서 독립적인 프로세스들의 집합으로 실행되고 이들은 Driver Program의 Spark Context를 통해 조정됨
  • Cluster 환경에서 실행하기 위해 Spark Context는 몇 가지 타입의 cluster manager(어플리케이션 간 리소스를 할당)들에 접속할 수 있음
  • 일단 연결되면, Spark는 Cluster의 노드에서 Executor(사용자가 만든 애플리케이션에 대한 계산을 실행하고 데이터를 저장하는 프로세스)를 요구함
  • 다음으로, 사용자가 작성한 어플리케이션 코드를 Executor에게 보냄
  • 마지막으로, SparkContext가 Executor들에게 task들을 보내 실행함

주요 용어

용어 의미
Application Spark에 기반한 사용자 프로그램
Driver Program과 Cluster 상의 Executor들로 구성되어 있음
Application jar 사용자의 Spark Application이 담겨있는 jar 파일
경우에 따라서 uber jar(Application의 의존성을 포함한 jar)를 만들기 원할 수도 있음
사용자의 jar 파일은 절대 Hadoop 또는 Spark 라이브러리를 포함하지 않고 런타임 시에 추가됨
Driver Program main 함수가 실행되는 프로세스이고 SparkContext를 생성함
Cluster Manager 클러스터로부터 리소스를 얻기 위한 외부 서비스
Deploy mode Driver Process가 실행되는 위치를 구별함
Cluster mode : Framework이 Cluster 내부에서 Driver를 실행함
Client mode : 제출자가 Cluster 밖에서 Driver를 실행함
Worker Node 클러스터에서 응용 프로그램 코드를 실행할 수있는 모든 노드
Executor Application 실행을 위해 worker node에서 실행되는 프로세스, task를 실행하고 데이터를 메모리 또는 디스크 저장소에 저장함
각 어플리케이션은 자신의 executor들을 가짐
Task 하나의 Executor로 보내지게 될 작업 단위
Job Spark Action(e.g. save, collect)에 의해 생생된 여러 작업으로 이뤄진 병렬 계산
이 용어는 Driver 쪽 log에서 볼 수 있음
Stage 각각의 Job은 서로 의존하는 Stage(task들의 집합)들로 나눠짐(MapReduce의 map과 reduce stage들과 유사함)
이 용어는 Driver 쪽 log에서 볼 수 있음

Standalone Cluster 실행순서

  1. bin/spark-submit을 이용하여 Application 제출
  2. Driver Program이 실행되고 SparkContext(Spark Cluster와의 연결)가 생성됨
  3. Driver가 Cluster Manager에게 Executor 리소스 요청
  4. Cluster Manager가 Worker들에게 Executor를 띄우도록 명령함
  5. Driver Program이 DAG Scheduling을 통해 작업을 Task 단위로 분할하여 할당된 Executor에게 전송
  6. Executor가 여러 스레드에서 Task들을 실행한 후 결과를 Driver Program에 보냄
  7. Application이 종료되면 Cluster Manager에게 리소스 반납

참고자료

Apache Spark™ - Unified Analytics Engine for Big Data
Overview - Spark 2.4.0 Documentation
Understand the Spark Deployment Modes

Jump Start with Apache Spark 2.0 on Databricks


'Spark' 카테고리의 다른 글

RDD Programing  (0) 2019.05.14
Virtual Box를 활용한 Spark 실습 환경 구축  (0) 2019.01.22
댓글