엔지니어 블로그

[Spark] Spark 기본 동작 본문

Spark

[Spark] Spark 기본 동작

안기용 2025. 3. 25. 21:44

1. RDD란?

RDD는 Resilient Distributed Dataset의 약자로 탄력적인 분산 데이터셋이라는 의미다. 데이터를 클러스터 내에 분산 저장하고, 하나의 파일처럼 읽고 쓰는 것이 가능하다. 물리적으로 분산저장 되는 것이 아닌, 내부에 Logical Partition이 있고 해당 파티션 기준으로 물리적 노드에서 나누어 처리가 가능하다.
RDD는 불변하는 특징을 가지고있다. RDD에 작업을 하게 되면 하나 혹은 다수의 RDD를 결과 값으로 받게 된다. 즉, 작업한 RDD는 변함없이 존재하고 작업이 반영된 새로운 RDD만 생성되는 것이다.

2. Transformation / Action

RDD로 수행하는 동작은 Transformation / Action 으로 나누어 볼 수 있다. 먼저 Transformation을 살펴보겠다. Transformation은 RDD에 변화를 주는 Spark Operation을 통칭한다. map,filter 등의 Operation이 여기에 속한다. Transformation을 진행하게 되면 새로운 RDD가 생성되고 이러한 변화를 DAG 형태로 나타낼 수 있는데 이것을 RDD Lineage 라고 한다. RDD Lineage를 살펴보면 RDD가 어떻게 변화하는지 그 과정을 한 눈에 볼 수 있게 된다.

rdd lineage

Action은 기존의 RDD로 결과 값을 계산하거나 HDFS와 같은 외부 스토리지에 저장하는 오퍼레이션이다. count,collect 등이 있다.

3. Lazy Evaluation

RDD의 Transformation을 실행해보면 굉장히 빠르게 적용되는 것을 볼 수 있다. 하지만 해당 연산은 Action을 사용할때 일어난다. 이것을 Lazy Evaluation이라고 한다. 즉, Spark는 Action을 만나기 전까지는 Transformation을 수행하지 않는다. 이렇게 하는 데는 여러 장점이 있기 때문이다.

1. 불필요한 처리 생략

만약 Transformation을 호출 즉시 바로 실행하게 된다면 비효율적인 상황이 발생할 수 있게된다.

map 함수를 통해 10만건의 데이터에 1000을 더한 후 추가로 3을 더한다.

이런 상황이 발생한다면 작업을 2번 처리하게 될 것이다. 하지만 Lazy Evaluation을 통해 Catalyst Optimizer가 물리적인 실행계획을 수립해주기 때문에 효율적으로 데이터 처리가 가능하다.

2. 메모리 효율성

만일 Transformation을 즉시 처리한다면 중간 데이터를 저장할 필요가 있다. 하지만 Lazy Evalution을 통해 필요없는 데이터를 저장하고 삭제하는 비용을 줄일 수 있게 된다.

4. Narrow / Wide Transformation

Transformation은 2종류가 있다. 먼저 Narrow의 경우 파티션 내에서만 연산이 수행된다. 다른 파티션의 데이터와 무관하기 때문에 shuffle 과정이 없어 빠른 작업이 가능하다 map
Wide는 여러 파티션에 걸쳐 연산이 수행된다. 파티션 사이의 data 이동인 shuffle가 필수적으로 발생한다.

5. Cache & Persist / Checkpoint

Spark는 반복적인 job을 위해 성능 최적화 방법으로 cahce를 통한 반복연산을 사용한다. chche,persist 그리고 checkpoint가 그 기능을 담당한다.
cache와 persist는 RDD는 데이터를 캐시한다. 두개는 비슷하며 cache를 하면 내부적으로 persist가 수행된다. checkpoint도 비슷하지만 다른 부분이 있다. checkpoint는 데이터를 캐시하여 disk에 저장한다.
checkpoint는 RDD와 Streaming에서 서로 다른 목적을 위해 사용된다. RDD는 여러 배치 작업의 Statful한 캐시 데이터 활용을 위해 사용된다. Streaming의 경우 장애대응을 위해 사용하게 된다.

'Spark' 카테고리의 다른 글

[Spark] Lazy Evaluation  (0) 2025.04.06
[Spark] Partition  (0) 2025.03.26
Parquet란?  (0) 2025.03.21
[Spark] Spark Architecture  (0) 2025.02.25
[Spark] Spark 개요  (0) 2025.02.25