Spark 의 데이터 구조
Spark 의 데이터 구조는 아래와 같이 크게 3가지 종류로 분류할 수 있다.
- RDD (Resillient Distributed Data)
- Dataframe
- Dataset
이 중 RDD는 Spark에 가장 먼저 도입된 데이터 구조이다.
RDD 개념
RDD(Resillient Distributed Data)란?
- Resillient (회복력 있는, 변하지 않는)
- 메모리 내부의 데이터가 손실되었을 때, 유실된 파티션을 재연산해 데이터를 복구할 수 있음
- Distributed (분산된)
- 스파크 클러스터를 통하여, 메모리에 분산되어 저장됨
- Data
- 파일, 정보 등의 데이터
즉, RDD 는 여러 분산 노드에 걸쳐 저장되는, 변경이 불가능한 데이터의 집합이다.
따라서, RDD 를 변경하기 위해선 새로운 RDD 를 생성하는 방법뿐이며, RDD 는 2가지 Operation 을 사용해 조작할 수 있다.
RDD 주요 특징
- 데이터 추상화
- 데이터는 클러스터에 흩어져있지만 하나의 파일인것 처럼 사용이 가능하다.
- 다수의 파티션으로 관리됨
- 하나의 RDD 는 여러 파티션으로 나뉜다.
- 파티션의 개수, 파티셔너(Hash, Range) 등을 선택 가능하다.
- Resilient & Immutable
- RDD1이 변환을 거치면 RDD1이 바뀌는게 아니라 새로운 RDD2가 만들어진다.
- 변환을 거칠때마다 연산의 기록이 남는다.
- RDD의 변환 과정은 하나의 비순환 그래프 (Acyclic Graph) 로 그릴 수 있어 문제가 생길 경우 쉽게 전 RDD로 돌아갈 수 있다.
- Type-safe
- 컴파일시 Type을 판별할 수 있어 문제를 일찍 발견할 수 있다.
- Unstructured / Structured Data
- Unstructured Data
- 텍스트
- 로그
- 자연어
- Structured Data
- table
- RDB
- DataFrame
- Unstructured Data
Operation
- Transformation
- 기존의 RDD 를 변경하여 새로운 RDD 를 생성
➜ 즉, 리턴값이 RDD가 된다. - map, filter, distinct, union, intesection 등
- 기존의 RDD 를 변경하여 새로운 RDD 를 생성
- Action
- RDD 값을 기반으로 무엇인가를 계산해서, 결과를 생성하는 것
➜ 즉, 리턴값이 데이터 또는 실행 결과 - collect, count, top, reduce 등
- RDD 값을 기반으로 무엇인가를 계산해서, 결과를 생성하는 것
RDD 동작 원리의 핵심은 Lazy Evaluation (느긋한 연산) 이다.
Lazy Evaluation이란, 태스크를 정의할때는 연산을 하지 않다가 결과가 필요할때 연산하는 것을 말한다.
즉, RDD 는 Action 연산자를 만나기 전까지는, Transformation 연산자가 아무리 쌓여도 처리하지 않는다.
이는 Hadoop의 Map Reduce 동작과 대조적이며, Spark는 간단한 operation들에 대한 성능적 이슈를 고려하지 않아도 된다는 장점을 가지고 있다.
DAG (Directed Acyclic Graph)
RDD 를 변경하는 순서를 Lineage 라고 하며, Lineage 는 DAG(Directed Acyclic Graph)의 형태를 가진다.
DAG 의 형태는 아래와 같다.
노드간의 순환(cycle)이 없으며, 일정한 방향성을 가지기 떄문에 각 노드간에는 의존성이 있고, 노드 간의 순서가 중요하다.
따라서, RDD 연산 과정에서 특정 RDD 관련 정보가 메모리에서 유실됐을 경우, DAG 그래프를 복기하여 다시 계산하고 복구할 수 있다.
Spark 는 이러한 특성 때문에 Fault-tolerant(작업 중 장애나 고장이 발생해도 예비 부품이나 절차가 즉시 그 역할을 대체 수행함으로써 서비스의 중단이 없게 하는 특성)를 잘 보장한다.
<참고 사이트>
'DevOps > Spark' 카테고리의 다른 글
데이터 엔지니어링이란? (0) | 2022.02.24 |
---|---|
[Mac OS] Java (OpenJDK) 설치 및 버전 변경하기 (0) | 2022.02.23 |