-
Spark RDD Lineage 알아보기Spark 2023. 12. 16. 07:43728x90반응형
- 목차
소개.
RDD 는 Resillient Distributed Dataset 의 약자입니다.
RDD 는 Spark 의 기본적인 데이터 단위인데요.
RDD 의 Resillience 를 구현하기 위해서 사용되는 Concept 이 RDD Lineage 입니다.
이번 글에서는 RDD Lineage 에 대해서 알아보려고 합니다.
RDD Lineage.
아래 이미지는 Spark UI 의 DAG Visualization 입니다.
RDD Lineage 가 아래 이미지와 같은 DAG 형식으로 표현될 수 있습니다.
DAG 그래프 표현될 수 있는 이유는 RDD Lineage 가 선형적인 연결고리를 가지기 때문인데요.
Source RDD -> Transformed RDD1 -> Transformed RDD2 -> ... -> Actioned RDD 와 같은 형식으로
RDD 는 연쇄적인 흐름을 가집니다.
따라서 하나의 RDD 는 아래와 같은 구조를 가지는데요.
RDD { prev : parent RDD func : Transformtaion Function }
RDD 는 상위 혹은 이전의 RDD 를 가지게 되고,
이전 RDD 로부터 어떠한 Transformation 을 거치게 되는지에 대한 정보가 기록됩니다.
이러한 연결고리들이 RDD Lineage 가 됩니다.
만약에 Failure 상황에서 Failover 를 실행하기 위해서 RDD Lineage 를 통해
아래와 같은 프로세스를 Retry 하게 됩니다.
Source RDD -> Transformed RDD1 -> Transformed RDD2 -> ... -> Actioned RDD
이러한 RDD Lineage 를 통해서 Failover 가 구현됩니다.
Lineage Dependency.
RDD 는 상위 RDD 를 가집니다.
이러한 관계를 Dependency 라고 합니다.
어떠한 Dependency 를 가졌느냐에 따라서 몇가지 종류가 나뉘는데요.
해당 Dependency 들에 대해서 알아보도록 하겠습니다.
Narrow Dependency.
filter, map, flatMap 등과 같은 Transformation 을 거친 RDD 들은 Narrow Dependency 를 가집니다.
이는 1개의 상위 RDD 를 가지는 구조이구요.
가장 흔하게 사용됩니다.
Wide Dependency.
반면, Wide Dependency 는 Join, Union Transformation 과 같이 2개 이상의 상위 RDD 를 가지는 케이스입니다.
JavaRDD<Row> RDD1 = sc.parallelize(List.of(RowFactory.create("A", 1), RowFactory.create("B", 2), RowFactory.create("C", 3))); JavaRDD<Row> RDD2 = sc.parallelize(List.of(RowFactory.create("A", "apple"), RowFactory.create("B", "banana"), RowFactory.create("D", "orange"))); JavaRDD<Row> RDD3 = RDD1.union(RDD2);
No Dependency.
CollectionRDD 와 같이 데이터소스로써 역할을 수행하는 RDD 들은 상위 RDD 에 대한 Dependency 가 없습니다.
Kafka, Hadoop, 데이터베이스, CollectionRDD 와 같은 데이터소스 RDD 들은 데이터 소스로써 동작함에 집중합니다.
반응형'Spark' 카테고리의 다른 글
Spark Stage 알아보기 (0) 2023.12.23 [Spark] Unresolved Logical Plan 알아보기 (0) 2023.12.20 Spark RDD Storage 알아보기 (Persist, Cache) (0) 2023.12.15 [Spark] parallelize 알아보기 (0) 2023.12.15 Spark DataFrame 알아보기 (0) 2023.12.15