아파치 스파크 캐싱(Apache Spark Caching)은 RDD(Resilient Distributed Dataset) 또는 데이터프레임(DataFrame)을 메모리에 저장하여 반복적인 연산 시 성능을 향상시키는 기법이다. 스파크는 기본적으로 지연 실행(Lazy Evaluation)을 사용하므로, 동일한 데이터를 여러 번 사용할 경우 캐싱을 통해 중복 연산을 방지할 수 있다.
개요
스파크에서 RDD나 데이터프레임을 캐싱하면, 디스크에서 다시 읽거나 동일한 연산을 반복하지 않고 메모리에 저장된 데이터를 재사용할 수 있다. 이를 통해 I/O 비용 절감, 반복 연산 최적화, 쿼리 성능 향상 등의 효과를 얻을 수 있다.
- 반복적으로 사용되는 데이터 저장
- 메모리를 활용한 빠른 접근
- 쿼리 성능 및 연산 속도 향상
캐싱과 퍼시스팅
스파크에서는 cache()와 persist() 두 가지 방식으로 데이터를 캐싱할 수 있다.
cache()
- RDD 또는 데이터프레임을 기본 스토리지 레벨(MEMORY_AND_DISK)로 저장.
- 기본적으로 메모리에 저장하지만, 메모리가 부족하면 디스크에 저장.
df = spark.read.csv("data.csv", header=True, inferSchema=True)
df.cache() # 캐싱 적용
df.count() # 첫 실행 시 캐싱 수행
df.show() # 캐시된 데이터 사용
persist()
- 캐싱을 더 세밀하게 제어할 수 있도록 다양한 스토리지 레벨(Storage Level)을 제공.
- 기본적으로 MEMORY_ONLY 옵션을 사용하지만, 다른 저장 방식 선택 가능.
from pyspark import StorageLevel
df.persist(StorageLevel.MEMORY_AND_DISK)
df.count() # 캐싱 수행
스토리지 레벨(Storage Levels)
스파크에서는 캐싱 데이터를 저장하는 방식을 선택할 수 있다.
스토리지 레벨 | 설명 |
---|---|
MEMORY_ONLY | 데이터를 메모리에 저장 (디스크 저장 없음) |
MEMORY_AND_DISK | 메모리가 부족하면 디스크에 저장 |
MEMORY_ONLY_SER | 메모리에 직렬화된(Serialized) 형태로 저장하여 공간 절약 |
MEMORY_AND_DISK_SER | 메모리에 직렬화하여 저장하고, 부족하면 디스크 사용 |
DISK_ONLY | 메모리에 저장하지 않고, 디스크에만 저장 |
OFF_HEAP | JVM 힙(heap) 외부에 저장하여 GC(가비지 컬렉션) 영향을 줄임 |
캐싱의 필요성
스파크에서 캐싱을 사용하면 다음과 같은 장점이 있다.
- 반복 연산 최적화
- 동일한 데이터에 대해 여러 번 연산이 수행될 경우, 캐싱을 통해 중복 연산 방지.
- 디스크 I/O 최소화
- 데이터를 반복적으로 읽지 않고 메모리에서 직접 접근.
- 쿼리 성능 향상
- 복잡한 연산을 수행하는 데이터프레임을 캐싱하여 실행 속도를 증가.
캐싱 해제
캐싱된 데이터를 더 이상 사용하지 않을 경우 unpersist()를 호출하여 메모리를 해제할 수 있다.
df.unpersist() # 메모리에서 캐싱 해제
캐싱 최적화 기법
스파크에서 효과적으로 캐싱을 활용하는 방법은 다음과 같다.
- 반복적으로 사용되는 데이터만 캐싱
- 모든 데이터에 캐싱을 적용하면 메모리 낭비가 발생할 수 있음.
- 적절한 스토리지 레벨 선택
- MEMORY_ONLY가 가장 빠르지만, 메모리 부족 시 MEMORY_AND_DISK가 유용.
- 캐싱 후 첫 번째 액션 수행
- cache() 또는 persist()는 지연 실행되므로, count() 또는 show() 등을 호출하여 즉시 저장.
응용
스파크 캐싱은 다양한 데이터 처리 작업에서 활용된다.
- ETL(Extract, Transform, Load)
- 변환된 데이터를 캐싱하여 여러 단계에서 재사용.
- 데이터 분석 및 머신러닝
- 반복적인 데이터 연산 및 모델 훈련 속도 향상.
- 스트리밍 처리
- Spark Streaming에서 이전 데이터 상태를 유지하는 데 사용.
같이 보기
참고 문헌
- Zaharia, Matei, et al. "Spark: Cluster Computing with Working Sets." USENIX, 2010.
- Chambers, Bill, and Zaharia, Matei. "Spark: The Definitive Guide." O'Reilly Media, 2018.