DB

Spark 개념

25G 2023. 8. 16. 14:38

Apache Spark?

Apache Spark는 대규모 데이터 처리를 위한 오픈 소스 분산 컴퓨팅 시스템입니다.

용어 정리

  1. 기본 개념
    • RDD (Resilient Distributed Dataset): Spark의 기본 데이터 구조.
    • DAG (Directed Acyclic Graph): 작업의 실행 계획을 나타냅니다.
    • Partitioning: 데이터의 분할 방식.
    • Transformation and Action: Spark에서의 주요 작업 유형들.
  2. Spark Architecture
    • Driver와 Executor의 역할과 동작 방식
    • Spark Application, Jobs, Stages, Tasks의 관계와 흐름
  3. Spark APIs
    • DataFrame & Dataset API: 선언적 데이터 처리를 위한 인터페이스
    • Spark Streaming: 실시간 데이터 처리를 위한 API
  4. Spark SQL
    • DataFrame을 사용하여 SQL 쿼리를 실행하는 방법
    • Catalog와 External Databases
  5. Spark MLlib
    • 머신러닝 작업을 위한 라이브러리
  6. Spark Tools and Utilities
    • Spark-shell, Spark-submit 등의 유틸리티
  7. Cluster Managers
    • Standalone, Mesos, YARN, Kubernetes 등 Spark의 클러스터 매니저들에 대한 이해
  8. Tuning and Debugging
    • Spark UI 사용법
    • Performance tuning: 메모리 관리, 셔플 최적화, 데이터 직렬화, 파티션 조정 등
    • 로깅 및 디버깅 기법
  9. Data Sources and Integration
    • HDFS, Cassandra, Kafka, S3 등 다양한 데이터 소스와의 통합 방법
  10. Deployment and Operations
    • 클러스터 구성 및 유지 보수
    • 클러스터 모니터링 및 로깅
  11. Programming Languages
    • Spark는 Scala로 작성되었으며, Scala, Java, Python 및 R에서 사용할 수 있습니다. 따라서 해당 언어 중 하나 이상에 익숙해야 합니다.
  12. Environment Setup
    • Spark 및 관련 라이브러리의 설치 및 설정 방법
  13. Spark Ecosystem Projects
    • Apache Kafka, Delta Lake, Apache Arrow 등과 같은 연관 프로젝트에 대한 이해

Spark 개념

  1. RDD (Resilient Distributed Dataset)
    • RDD 는 Spark의 기본 데이터 구조
    • 분산되고 불변하는 컬랙션으로, 변환과 작업을 지원, (트랜스포메이션과 액션)
    • 실패한 작업을 다시 실행할 수 있는 내결합성 제공
  2. DataFrame and Dataset
    • DataFrame은 이름이 있는 열을 가진 분산 데이터 컬렉션, SQL처럼 작동하며, 최적화된 실행 계획을 위한 Catalyst엔진을 사용한다.
    • Dataset은 Spark 2.x부터 도입된 타입세이프한 구조화된 API Scala와 java에서만 사용가능
    • RDD보다는 DataFrame및 Dataset을 사용하는 것이 장되는데 내부최적화 기능을 사용할 수 있기때문
  3. Transformations and Actions
    • Transformation은 데이터를 변경하지 않고 새로운 RDD/DataFrame을 생성하는 연산입니다. (map 이나 filter처럼)
    • Action은 RDD/DataFrame에서 값을 계산하거나 데이터를 저장하는 연산입니다.
  4. DAG(Directed Acyclic Graph
    • DAG는 RDD의 변환을 노드로 나타내는 방향성 비순환 그래프 입니다.
    • 이를 통해 Spark는 스테이지 경계를 결정하고, 필요한 경우 재계산을 효율적으로 수행합니다.
  5. Partitioning
    • 데이터가 클러스터 노드 간에 어떻게 분할되는지를 결정하는것Spark Architecture
    • Dravier Program: Spark의 메인 프로그램으로 작업의 실행과 결과 집계를 담당합니다.
    • Excutor: 클러스터 노드에서 실행되며, 실제 작업을 수행하고, 데이터를 로컬에 저장합니다.
    • Task: 파티션 단위의 데이터 처리 단위
    • Job: 하나 이상의 스테이지로 구성된 병렬 처리 작업 단위.
    • Stage: 연속적인 변환 적업들을 그룹화하여 형성된 작업단계이다.Spark Content and SparkSession
    • Spark Context(SC) : Spark 진입점, 클러스터와 통신을 관리합니다.
    • Spark Session: Spark2.x 부터 도입된 진입점, SQL,DataFram, Dataset과 같은 기능에 접근할때 사용합니다.

내결합성

내결합성은 영어로 Resilience로 시스템이나 네으워크 일부가 실패할 경우에도 작동을 계속 유지할 수 있는 능력을 나타내는 말이다.
Spark의 RDD에서 R은 이 내결함성을 나타내는 약자이다.

Spark는 내부적으로 RDD의 데이터를 여러 파티션으로 나누어 클러스터 내의 여러 노드에 분산저장을 하는데 이때 각파티션은 다중 복제를 통해 여러 노드에 복사될 수 있다. 따라서 노드 중 하나가 실패하더라도 해당 데이터는 다른 노드에도 복제되어 있어 데이터 손실없이 작업을 계속 수행할 수 있는것이다.
그리고 RDD는 불변성을 가지기 때문에, 한번에 생성된 RDD는 변경되지 않습니다. 이특성은 실패한 작업의 복구가 필요할때 중요한데 실패한 작업은 원본데이터나 변환 로직을 사용하여 다시 계산될 수 있다.