RDD를 이해하면 아파치 스파크를 90% 이해했다고 한다.
스파크를 계속 사용하면서 알듯 말 듯 RDD를 다시 한번 공부하면서 게시글을 작성해 보려 한다.
Spark RDD
Resilient Distributed Dataset (RDD)
탄력적인 분산 데이터 셋
Resilient 는 탄력적이라는 뜻이 있다. 데이터를 병렬처리하는 스파크의 일부 노드에서 데이터를 처리하는 중에 문제가 발생하면 문제를 회복 할 수 있다는 것을 뜻한다.
데이터를 병렬 처리 중 어떤 노드에서 문제가 발생해도 데이터를 손실 없이 회복 할 수 있는 이유는 무엇일까?
이 이유를 알기 위해서는 RDD의 특징을 앎으로서 이해 할 수 있다.
RDD의 특징
1. 데이터 추상화
스파크는 여러 클러스트에서 데이터를 하나의 파일처럼 다룬다.
어떤 크기의 데이터를 가지고 오더라도 SparkContext 객체 하나로 여러 노드에서 똑같이 다룰 수 있다.
2. 불변성 ( Immutable)
스파크는 immutable(불변)하게 데이터를 다루기 때문에 특정 노드에서 에러가 발생한 경우 복원이 가능하고 다른 노드에서 대체가 가능하다.
RDD의 변환 과정은 하나의 비 순환 그래프로 그릴 수 있다.
RDD1이 transfer 작업을 거치면 새로운 RDD2가 되는것이 아니라 또 다른 새로운 RDD2 객체가 만들어진다.
그러므로 RDD2가 RDD3으로 transformation 실행중 에러가 발생한다면 RDD2를 복원 후 다른 노드에서 다시 transformation 작업을 실행한다.
3. Type-safe 기능
컴파일 시 Type을 판별 할 수 있어 문제를 일찍 발견할 수 있다.
Integer RDD인지, StringRDD인지 먼저 판단 할 수 있어 문제를 일찍 발견 할 수 있다. => 개발자 친화적
4. 정형, 비정형 데이터
RDD는 Unstructured / Structured Data를 모두 담을 수 있다.
텍스트 형태의 비정형 데이터나 테이블형식의 정형화 된 데이터들 모두 다룰 수 있다.
5. 게으른 연산 (Lazy)
게으르다는 것은 결과가 필요할 때 까지 연산을 하지 않는다는 뜻이다.
스파크 연산은 크게 두가지로 나눌 수 있다.
- Transformation
- Action
스파크는 Action 연산을 만나기 전까지 transformation을 실행하지 않는다.
action 연산을 만나고 나서야 기억하고 있는 tranformation 작업을 모두 실행 한다.
이러한 작업 수행 방법은 작업의 최적화 효과를 낼 수 있다.
RDD를 사용하는 이유
- RDD는 유연하기 때문에 짧은 코드로도 여러 작업을 할 수 있다.
- 특히 게으른 연산(Lazy)덕분에 데이터가 어떻게 변환 될지 생각 할 수 있게 된다. => Task 최적화
'Development > Data Engineering' 카테고리의 다른 글
[Apache Flink] 플링크 v1.15 TableEnviroment execute() 메서드 삭제 (0) | 2022.05.12 |
---|---|
[Docker] M1 맥 도커 confluentinc/cp-kafka 대체 이미지 (0) | 2022.04.28 |
[Apache Airflow] 아파치 에어플로우란? (0) | 2022.04.16 |
[Apache Spark] 스파크의 구조와 실행흐름 이해하기 (0) | 2022.03.30 |
분산처리의 문제점 (0) | 2022.03.23 |
댓글