IT용어위키



아파치 스파크 캐싱

아파치 스파크 캐싱(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.

  출처: IT위키(IT위키에서 최신 문서 보기)
  * 본 페이지는 공대위키에서 미러링된 페이지입니다. 일부 오류나 표현의 누락이 있을 수 있습니다. 원본 문서는 공대위키에서 확인하세요!