우노
[Spark] RDD 란? 본문
Spark 의 데이터 구조
- Spark 의 데이터 구조는 아래와 같이 크게 3가지 종류로 분류할 수 있습니다.
- RDD (Resillient Distributed Data)
- Dataframe
- Dataset
- 그 중, RDD 는 Spark 에 가장 처음으로 도입된 데이터 구조입니다.
RDD 개념
- RDD(Resillient Distributed Data) 는 아래와 같은 의미를 가집니다.
- Resillient (회복력 있는, 변하지 않는)
- 메모리 내부의 데이터가 손실되었을 때, 유실된 파티션을 재연산해 데이터를 복구할 수 있습니다.
- Distributed (분산된)
- 스파크 클러스터를 통하여, 메모리에 분산되어 저장됩니다.
- Data
- 데이터입니다.
- Resillient (회복력 있는, 변하지 않는)
- 즉, RDD 는 여러 분산 노드에 걸쳐 저장되는, 변경이 불가능한 데이터의 집합입니다.
- 따라서, RDD 를 변경하기 위해선 새로운 RDD 를 생성하는 방법뿐이며,
- RDD 는 2가지 Operation 을 사용해 조작할 수 있습니다.
Operation
- RDD 는 2가지 Operation (Transformation, Action) 을 지원합니다.
- Transformation
- 기존의 RDD 를 변경하여 새로운 RDD 를 생성하는 것입니다.
- 즉, 리턴값이 RDD 입니다.
- map, filter 등을 예로 들 수 있습니다.
- Action
- RDD 값을 기반으로 무엇인가를 계산해서, 결과를 생성하는 것입니다.
- 즉, 리턴값이 데이터 또는 실행 결과입니다.
- collect, count 등을 예로 들 수 있습니다.
- Transformation
- 이러한, RDD 동작 원리의 핵심은 Lazy Evaluation (느긋한 연산) 입니다.
- 즉, RDD 는 Action 연산자를 만나기 전까지는, Transformation 연산자가 아무리 쌓여도 처리하지 않습니다.
DAG (Directed Acyclic Graph)
위처럼, RDD 를 변경하는 순서를 Lineage 라고 하며
Lineage 는 DAG(Directed Acyclic Graph)의 형태를 가집니다.
DAG 의 형태는 아래와 같습니다.
- 노드간의 순환이 없으며, 일정한 방향성을 가지기 떄문에
- 노드 간의 순서가 중요한 형태입니다.
따라서, RDD 연산 과정에서 특정 RDD 관련 정보가 메모리에서 유실됐을 경우,
DAG 그래프를 복기하여 다시 계산하고, 복구할 수 있습니다.
Spark 는 이러한 특성 때문에 Fault-tolerant 를 잘 보장합니다.
참고
'Data > Spark' 카테고리의 다른 글
[Spark] yarn 구조 및 실행 순서 (0) | 2020.07.14 |
---|---|
[Spark] sbt를 사용한 간단한 Jar 파일 빌드 (0) | 2020.07.14 |
[Spark] Spark와 Hadoop MapReduce의 차이 (0) | 2020.07.12 |
[Spark] MPI(Message Passing Interface)란? (0) | 2020.07.12 |
[Spark] Shuffle 이란? (2) | 2020.07.12 |
Comments