본문 바로가기
Development/Data Engineering

[Apache Spark] 아파치 스파크 RDD란?

by _KHK 2022. 4. 19.

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) 

게으르다는 것은 결과가 필요할 때 까지 연산을 하지 않는다는 뜻이다.

 

스파크 연산은 크게 두가지로 나눌 수 있다.

  1. Transformation
  2. Action

스파크는 Action 연산을 만나기 전까지 transformation을 실행하지 않는다.

action 연산을 만나고 나서야 기억하고 있는 tranformation 작업을 모두 실행 한다.

이러한 작업 수행 방법은 작업의 최적화 효과를 낼 수 있다.

 

 

RDD를 사용하는 이유

  • RDD는 유연하기 때문에 짧은 코드로도 여러 작업을 할 수 있다.
  • 특히 게으른 연산(Lazy)덕분에 데이터가 어떻게 변환 될지 생각 할 수 있게 된다. => Task 최적화

 

 

댓글