Azure Databricks에서 캐싱을 사용하여 성능을 최적화

클라우드 오브젝트 저장소에서 데이터를 읽는 것은 로컬 디스크에서 데이터를 읽는 것보다 느립니다. 캐싱이 없으면, 동일한 Parquet 데이터 파일을 읽는 쿼리와 노트북이 매번 클라우드 오브젝트 저장소에서 반복적으로 데이터를 가져오게 됩니다.

Azure Databricks는 데이터 읽기 속도를 높이기 위해 디스크 캐싱을 사용합니다. 노드가 원격 저장소에서 Parquet 데이터 파일을 가져올 때, 빠른 중간 형식의 사본을 로컬 저장소에 자동으로 저장합니다. 같은 데이터를 나중에 읽을 때는 로컬에서 이루어지며 훨씬 더 빠릅니다. 캐시는 델타 레이크 테이블을 포함한 모든 Parquet 데이터 파일에 대해 작동합니다.

참고

SQL 웨어하우스 및 Databricks Runtime 14.2 이상에서는 CACHE SELECT 명령은 무시됩니다. 대신 향상된 디스크 캐싱 알고리즘이 사용됩니다.

모범 사례

디스크 캐시는 같은 데이터를 여러 번 읽는 작업, 예를 들어 같은 테이블에 대한 반복 또는 반복 쿼리에서 가장 큰 도움이 됩니다. Azure Databricks는 이를 지원하는 워커 인스턴스 유형에서 자동으로 활성화합니다. 디스크 캐시가 읽기 속도를 높이려면 다음 방법을 따르세요:

  • 디스크 캐싱을 지원하는 워커 인스턴스 유형을 선택하세요. 디스크 캐싱을 사용할 인스턴스 유형 선택을 참조 하세요.
  • Parquet과 Delta Lake 데이터를 반복적으로 읽을 때는 Apache Spark 캐시 대신 디스크 캐시를 사용하세요. 자세한 내용은 '디스크 캐시와 스파크 캐시 비교'를 참조하세요.

Delta cache의 이름이 disk cache로 변경됨

Azure Databricks의 디스크 캐싱은 이전에 델타 캐시 및 DBIO 캐시라고 불렸습니다. 디스크 캐싱 동작은 독점적인 Azure Databricks 기능입니다. 이 이름 변경은 Delta Lake 프로토콜의 일부였다는 혼동을 해결하기 위한 것입니다.

디스크 캐시와 Spark 캐시를 비교해 보세요

Azure Databricks 디스크 캐시는 Apache Spark 캐싱과 다릅니다. Databricks는 자동 디스크 캐싱 사용을 권장합니다.

다음 표에는 워크플로에 가장 적합한 도구를 선택할 수 있도록 디스크와 Apache Spark 캐싱의 주요 차이점이 요약되어 있습니다.

기능 디스크 캐시 Apache Spark 캐시
다른 이름으로 저장 작업자 노드의 로컬 파일. 메모리 내 블록이지만, 이는 스토리지 수준에 따라 달라집니다.
적용 대상 ABFS 및 기타 파일 시스템에 저장된 모든 Parquet 테이블 모든 DataFrame 또는 RDD.
트리거됨 첫 번째 읽기에서 자동으로(캐시를 사용하는 경우). 수동으로는 코드 변경이 필요합니다.
평가됨 게으르게. 게으르게.
가용성 특정 노드 유형에서 기본적으로 활성화되어 있습니다. 설정 플래그로 활성화하거나 비활성화하면 됩니다. 항상 사용할 수 있습니다.
제거됨 LRU 방식으로 자동으로 또는 파일이 변경될 때 자동으로, 클러스터를 다시 시작할 때는 수동으로. LRU 방식으로 자동으로, unpersist를 사용하여 수동으로.

서버리스 컴퓨트에서는 df.cache()가 이 테이블의 Apache Spark 캐시와 다르게 작동합니다. 서버리스 컴퓨트에서 캐시 데이터프레임을 참고하세요.

디스크 캐시 일관성

디스크 캐시는 데이터 파일이 만들어지고, 삭제되고, 수정되거나 덮어쓰여지는 시기를 자동으로 검색하고 그에 따라 콘텐츠를 업데이트합니다. 캐시된 데이터를 명시적으로 무효화할 필요 없이 테이블 데이터를 기록, 수정 및 삭제할 수 있습니다. 오래된 항목은 자동으로 무효화되고 캐시에서 제거됩니다.

디스크 캐싱을 사용할 인스턴스 유형 선택

디스크 캐싱을 사용할 때 권장되는(그리고 가장 쉬운) 방법은 클러스터를 구성할 때 SSD 볼륨으로 작업자 유형을 선택하는 것입니다. 이러한 워커는 디스크 캐싱에 대해 사용하도록 설정되고 구성됩니다.

디스크 캐시는 작업자 노드와 함께 제공되는 로컬 SSD에서 사용할 수 있는 공간의 최대 절반을 사용하도록 구성됩니다. 구성 옵션은 디스크 캐시 구성을 참조하세요.

디스크 캐시 구성

Databricks는 컴퓨트용 캐시 가속 워커 인스턴스 유형을 선택할 것을 권장합니다. 이러한 인스턴스는 디스크 캐시에 맞게 자동으로 최적화되어 구성됩니다.

참고

작업자가 서비스 해제되면 해당 작업자에 저장된 Spark 캐시가 손실됩니다. 따라서 자동 크기 조정이 활성화된 경우 캐시에 다소 불안정성이 있습니다. 그러면 Spark가 필요에 따라 원본에서 누락된 파티션을 다시 읽어야 합니다.

디스크 사용량 설정

디스크 캐시가 워커 노드의 로컬 저장소를 어떻게 사용하는지 설정하려면 클러스터 생성 시 다음과 같은 Spark 구성 설정을 지정하세요:

  • spark.databricks.io.cache.maxDiskUsage: 캐시된 데이터용으로 예약된 노드당 디스크 공간(바이트)
  • spark.databricks.io.cache.maxMetaDataCache: 캐시된 메타데이터용으로 예약된 노드당 디스크 공간(바이트)
  • spark.databricks.io.cache.compression.enabled: 캐시된 데이터를 압축된 형식으로 저장해야 합니까

예제 구성:

spark.databricks.io.cache.maxDiskUsage 50g
spark.databricks.io.cache.maxMetaDataCache 1g
spark.databricks.io.cache.compression.enabled false

디스크 캐시 사용 또는 사용 안 함

디스크 캐시의 현재 설정을 확인하려면 다음을 실행하세요:

spark.conf.get("spark.databricks.io.cache.enabled")

디스크 캐시를 사용하거나 사용하지 않도록 설정하려면 다음을 실행합니다.

spark.conf.set("spark.databricks.io.cache.enabled", "[true | false]")

캐시를 사용하지 않도록 설정해도 로컬 스토리지에 이미 있는 데이터가 삭제되지는 않습니다. 대신 쿼리가 캐시에 새 데이터를 추가하거나 캐시에서 데이터를 읽지 못하게 됩니다.