Apache Spark: 하둡과 스파크 차이점, 스파크 데이터프레임과 RDD API(2)

// 데이터 엔지니어 병아리 탈출기 // 대표적인 데이터 프레임워크 (2)

SoniaComp
6 min readJan 4, 2022

오늘도 공부.. 🥲

출처: 대학일기
1. 스파크 분산시스템 아키텍처
2. spark 의 2가지 주요 개념
- RDD
- DAG
3. 하둡 맵-리듀스 단점 & 스파크 장점
4. 스파크 API
- RDD
- Spark SQL 과 DataFrame

스파크 분산시스템 아키텍처

Spark Application 은 Spark Context object 에 의해 클러스터에서 독립적인 프로세스들의 집합으로 실행이 됩니다. 클러스터에서 실행되기 위해, Spark Context 는 다양한 타입의 클러스터 매니저와 연결될 수 있다.
Spark Context 는 어플리케이션의 데이터를 저장하고 계산을 수행하는 프로세스들을 처리하는 노드들의 Executors 와 연결된 후, Executors 에 Application Code (Task) 를 전송하여 실행시킨다.

출처: https://spark.apache.org/docs/latest/cluster-overview.html
  • Application: Spark 에 구축된 사용자 프로그램. Driver Program과 Executor 로 구성
  • Application Jar: 런타임에 Hadoop 또는 Spark 라이브러리가 추가됨
  • Driver Program: Application의 main()함수를 실행하고, Spark Context를 생성하는 프로세스
  • Cluster Manager: 클러스터에서 리소스를 확보하기 위한 외부 서비스
  • Deploy mode: 드라이버 프로세스가 실행되는 위치 구별
    → “클러스터 모드”에서 클러스터 내부에서 드라이버 시작
    → “클라이언트 모드”에서 클러스터 외부에서 드라이버 시작
  • Worker node: 애플리케이션 코드를 실행할 수 있는 모든 노드
  • Executor: 작업을 실행하고 작업을 통해 메모리 또는 디스크 저장소에 데이터를 유지. Worker Node 에 의해 실행하고, 각 Application 에 존재.
  • Task: 한 Executor 에게 보내지는 일의 단위
  • Job: Spark 작업에 의해 생성되는 여러 작업으로 구성된 병렬 계산
  • Stage: 각 Job이 서로 의존성이 있는 ‘Stage’로 나누어짐

스파크 2가지 주요 개념

1. RDD (Resilient Distributed Datasets)

  • Resilient : 분산되어 있는 데이터에 에러가 생겨도 복구할 수 있는 능력
  • Distributed : 클러스터의 여러 노드에 데이터를 분산해서 저장
  • Dataset : 분산된 데이터 모음

RDD 연산

  1. Transformation: input => output (새로운 데이터셋)
    ex. map, filter
  2. Action: 데이터셋에 대한 계산
    ex. reduce, count
출처: https://www.edureka.co/blog/spark-architecture/#Overview

Plan
참고 블로그 링크

출처: https://blog.knoldus.com/understanding-sparks-logical-and-physical-plan-in-laymans-term/
  • logical plan: Logical plan은 수행해야하는 모든 transformation 단계에 대한 추상화. 드라이버(Master node)와 Executer(Worker node)에 대해서는 다루지 않는다.
  • physical plan: Logical plan이 어떻게 클러스터 위에서 실행될지에 관한 것

2. DAG (Directed Acyclic Graph)

DAG 엔진을 통해 맵 리듀스의 느린 부분 (multi-pass map reduce, multi-stage execution model) 을 제거해 성능 향상

하둡 맵-리듀스 단점

  • 구현의 복잡성: 하둡 라이브러리의 객체를 상속 받아 메소드를 오버라이딩하고, 최종적으로 구현된 클래스를 모아 jar 형태로 만들어 배치 형태로 하둡에 제출
  • ad-hoc 데이터 분석이나 streaming 데이터 분석에 적합하지 않음

스파크 강점

참고 블로그 링크

  • 분산 인메모리 프로세싱 엔진
    → 하둡을 지원하는 인메모리 프로세싱으로 속도가 빠르다.
    → Disk I/O가 많이 일어나는 하둡의 맵-리듀스보다 특정 작업에서는 더 빠르게 수행됨. 스파크는 HDFS 에 저장된 데이터를 하둡 코어 라이브러리를 호출함으로써 메모리로 불러온 후, 변환 및 계산 등을 메모리에서 수행.
  • 유저 친화적인 API
    → 여러가지 분산 데이터베이스나 파일 시스템 수용
    → Scala, Python, R 과 같이 다양한 언어의 API 지원

스파크 API

참고: Naver D2 LearningSpark
참고: “하둡을 제압한 빅데이터 플랫폼” 아파치 스파크란 무엇인가
참고: Spark API 블로그

저수준 API: RDD

RDD: 분산되어 존재하는 데이터 요소들의 모임 → 변경 불가능
→ Transformation, Action 2가지 타입의 연산을 지원
→ RDD를 lazy evaluation 으로 액션을 사용하는 시점에 처리

구조적 API: Spark SQL 과 DataFrame

Spark SQL은 구조화돈 데이터(스키마를 가진 데이터)에 대해 데이터 불러오기 및 쿼리등을 통해 쉽게 다룰 수 있다.

  • DataFrame: RDD의 확장 모델. Row 객체들의 RDD. 스키마 정보를 가지고 있다. DataFrame 추상화 클래스를 통해 구조화된 데이터 셋을 다루는 작업을 간편하게 만든다.
    → DataFrame 은 관계형 DB 테이블과 유사한 개념
  • 다양한 구조적 포맷의 데이터를 읽고 쓸 수 있다.
  • JDBC/ODBC 연결을 지원하므로 Spark SQL 을 통해 SQL 로 데이터를 질의할 수 있다.

API는 자고로 직접 코드를 작성해봐야 제맛이다. 아래 글을 참고하여 10분만에 실습을 끝내보장!!

--

--

SoniaComp
SoniaComp

Written by SoniaComp

Data Engineer interested in Data Infrastructure Powering Fintech Innovation (https://www.linkedin.com/in/sonia-comp/)

No responses yet