ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spark RDD Lineage 알아보기
    Spark 2023. 12. 16. 07:43
    728x90
    반응형

     

    - 목차

     

    소개.

    RDD 는 Resillient Distributed Dataset 의 약자입니다.

    RDD 는 Spark 의 기본적인 데이터 단위인데요.

    RDD 의 Resillience 를 구현하기 위해서 사용되는 Concept 이 RDD Lineage 입니다.

    이번 글에서는 RDD Lineage 에 대해서 알아보려고 합니다.

     

    RDD Lineage.

    아래 이미지는 Spark UI 의 DAG Visualization 입니다.

    RDD Lineage 가 아래 이미지와 같은 DAG 형식으로 표현될 수 있습니다.

    DAG Visualization

     

    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
Designed by Tistory.