Hadoop EcoSystem

[Spark] RDD

비번변경 2023. 11. 15. 16:07

RDD

Resilient Distributed Dataset의 약어로, Spark의 기본 데이터 구조이다.

데이터는 여러 분산 노드에 걸쳐 저장되고, 변경되지 않는다. 만약 변경이 필요한 경우 새로운 데이터셋을 만들어야 한다. 또한 병렬로 처리할 수 있고, 장애가 발생하는 경우 스스로 복구할 수 있다.

 

 

연산

RDD는 딱 두 가지 연산만을 제공한다.

Transformation

기존 RDD 데이터를 변경해 새로운 RDD 데이터를 생성한다. 특정 데이터만 추출하는 filter, map 등의 작업이 해당된다.

 

 

Action

RDD로 값을 계산하여 결과를 생성한다. 최종 결과를 반환하거나 외부 저장소에 쓸 수 있다. 데이터의 수를 세는 count, 첫 번째 요소를 반환하는 first 등의 연산이 해당된다.

 

 

특징

1. 데이터 추상화

RDD는 분산 클러스터 내 여러 노드에 걸쳐 저장되지만, 애플리케이션에서는 하나의 파일인 것처럼 사용할 수 있다.

 

2. 탄력성/불변성 

RDD는 탄력적이고 변하지 않는다(Resilient & Immutable)는 성질을 가진다. 불변성으로 인해 데이터 처리나 전송 중 발생한 네트워크 장애, 하드웨어 장애, 다른 이유로 인해 장애가 발생해도 데이터 복구가 가능하다.

또, 변환 작업을 거치면 새로운 RDD를 생성하고, 연산을 수행할 때마다 기록이 남을 수 있다. 다르게 말해 RDD 변환 과정은 하나의 DAG(Directed Acyclie Graph)로 표현할 수 있다.

 

3. Type-safe

RDD는 컴파일 시 타입을 판단할 수 있다.

 

4. 정형 / 비정형 데이터

정형/비정형 데이터 모두 RDD로 처리할 수 있다.

 

5. Lazy

RDD는 Lazy 로딩 방식을 사용하는데, 파일 데이터를 로딩하는 sparkContext.textFile 함수를 호출해도, 실제로 데이터가 메모리에 올라가는 시점은 Action에 해당하는 함수를 호출할 때이다. 즉, Transformation을 호출해도 Action을 호출할 때까지 데이터는 로딩되지 않는다.

 

 

 

 

참고 문서

https://6mini.github.io/data%20engineering/2021/12/12/rdd/

https://www.tutorialspoint.com/apache_spark/apache_spark_rdd.htm

https://bcho.tistory.com/1027

https://people.duke.edu/~ccc14/bios-823-2020/notebooks/C02_Sprak_Low_Level_API.html

https://blog.knoldus.com/things-to-know-about-spark-rdd/