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

Azure Databricks는 디스크 캐싱을 사용하여 빠른 중간 데이터 형식을 사용하여 노드의 로컬 스토리지에 원격 Parquet 데이터 파일의 복사본을 만들어 데이터 읽기를 가속화합니다. 원격 위치에서 파일을 가져와야 할 때마다 데이터가 자동으로 캐시됩니다. 그런 다음 동일한 데이터의 연속 읽기가 로컬로 수행되어 읽기 속도가 크게 향상됩니다. 캐시는 모든 Parquet 데이터 파일(Delta Lake 테이블 포함)에 대해 작동합니다.

참고 항목

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

디스크 캐시로 이름이 변경된 델타 캐시

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

디스크 캐시와 Spark 캐시 비교

Azure Databricks 디스크 캐시는 Apache Spark 캐싱과 다릅니다. Azure Databricks는 자동 디스크 캐싱을 사용하는 것이 좋습니다.

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

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

디스크 캐시 일관성

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

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

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

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

디스크 캐시 구성

Azure 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.set("spark.databricks.io.cache.enabled", "[true | false]")

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