Spark 2편 – Caching 및 Persist

안녕하세요 오늘은 BESPIN GLOBAL Data실 한제호님이 작성해주신 ‘Spark 2편 – Caching 및 Persist’ 에 대해 소개해드리도록 하겠습니다.

목차
1. Caching 및 Persist
2. spill over
3. 해결 방안

1. Caching 및 Persist

    • Caching 및 Persist 함수를 통해 다양한 방식으로 데이터 세트를 메모리에 저장합니다.
    • 하나의 RDD 또는 Dataframe을 중복적으로 활용하는 케이스에 적합합니다.
    • Cache() : 메모리 전용 또는 메모리와 디스크 병행 활용
    • Persist(): 아래 나열된 값을 통해 활용
    Caching 및 Persist

    2. spill over

    • Spark에서 RDD를 cache해서 저장할 수 있는 공간은 한정적입니다.
    • 과도한 RDD Caching은 오히려 디스크 spill over로 인해 느려질 수 있습니다.
    spill over
    • 디스크 spill over 케이스 (Spark UI >> Storage) – spark.eventLog.logBlockUpdates.enabled 옵션 true로 활성화
    • Storage Memory 부족으로 인해 일부 RDD는 스토리지에 저장될 수 있음
    • 해당 케이스의 경우 오히려 cache를 사용하지 않을때보다 더 느려질 수 있음
    해당 케이스의 경우 오히려 cache를 사용하지 않을때보다 더 느려질 수 있음

    3. 해결 방안

    • 메모리 증가
      • Executor 메모리를 늘린다. → spark.executor.memory
      • Heap 메모리상의 storage 메모리 비율을 조정한다. → spark.memory.storageFraction
    • Cache Clear을 통해 사용하지 않는 Cache 해제 → unpersist()
    • 파티션 재 정렬(repartition)를 통해 메모리에 저장된 RDD의 비율을 높인다.
      • Storage Memory에는 rdd 단위로 저장되기 때문에 상황에 따라 데이터량이 적은 RDD가 메모리에 저장되게 되면 많은 수의 데이터를 스토리지에서 읽어야함

    여기까지 ‘Spark 2편 – Caching 및 Persist’에 대해 소개해드렸습니다. 유익한 정보가 되셨길 바랍니다. 감사합니다. 

    Written by 한 제호 / Data실

    BESPIN GLOBAL