Optimización del rendimiento con el almacenamiento en caché en Azure Databricks

Azure Databricks usa el almacenamiento en caché de disco para acelerar las lecturas de datos mediante la creación de copias de archivos de datos de Parquet remotos en el almacenamiento local de los nodos mediante un formato de datos intermedio rápido. Los datos se almacenan en caché automáticamente cada vez que se tiene que capturar un archivo desde una ubicación remota. A continuación, las lecturas sucesivas de los mismos datos se realizan localmente, lo que da lugar a una velocidad de lectura significativamente mejorada. La memoria caché funciona para todos los archivos de datos de Parquet (incluidas las tablas de Delta Lake).

Nota:

En los almacenes de SQL y Databricks Runtime 14.2 y versiones posteriores, se omite el comando CACHE SELECT. En su lugar, se usa un algoritmo de almacenamiento en caché de disco mejorado.

Caché delta cuyo nombre se ha cambiado a caché de disco

El almacenamiento en caché de disco de Azure Databricks se denominaba antes caché delta y caché DBIO. El comportamiento del almacenamiento en caché de disco es una característica propietaria de Azure Databricks. Este cambio de nombre busca resolver la confusión de que formaba parte del protocolo Delta Lake.

Caché de disco frente a caché de Spark

La caché de disco de Azure Databricks difiere del almacenamiento en caché de Apache Spark. Azure Databricks recomienda usar el almacenamiento en caché de disco automático.

En la tabla siguiente se resumen las principales diferencias entre el almacenamiento en caché de disco y de Apache Spark para que pueda elegir la herramienta más adecuada para su flujo de trabajo:

Característica Caché de disco Caché de Apache Spark
Almacenado como Archivos locales en un nodo de trabajo. Bloques en memoria, pero depende del nivel de almacenamiento.
Se aplica a Cualquier tabla de Parquet almacenada en ABFS y otros sistemas de archivos. Cualquier DataFrame o RDD.
Desencadenado Automáticamente en la primera lectura (si la caché está habilitada). Manualmente. Requiere cambios en el código.
Evaluado De forma diferida. De forma diferida.
Disponibilidad Se puede habilitar o deshabilitar con marcas de configuración, está habilitada de manera predeterminada en algunos tipos de nodo. Siempre está disponible.
Expulsado Automáticamente según LRU o tras cualquier cambio en los archivos, manualmente al reiniciar un clúster. Automáticamente según LRU, manualmente con unpersist.

Coherencia de la caché de disco

La caché de disco detecta automáticamente cuándo se crean, eliminan, modifican o sobrescriben archivos de datos y se actualiza su contenido en consecuencia. Puede escribir, modificar y eliminar datos de tabla sin necesidad de invalidar explícitamente los datos almacenados en caché. Las entradas obsoletas se invalidan automáticamente y se expulsan de la caché.

Seleccionar tipos de instancia para usar el almacenamiento en caché de disco

La manera recomendada (y más sencilla) de usar el almacenamiento en caché de disco es elegir un tipo de trabajo con volúmenes SSD al configurar el clúster. Estos trabajados se habilitan y se configuran para el almacenamiento en caché de disco.

La caché de disco está configurada para usar como máximo la mitad del espacio disponible en los discos SSD locales proporcionados con los nodos de trabajo. Para conocer las opciones de configuración, consulte Configuración de la caché de disco.

Configuración de la caché de disco

Azure Databricks recomienda elegir tipos de instancias de trabajo acelerado con caché para los clústeres. Estas instancias se configuran automáticamente de forma óptima para la caché de disco.

Nota:

Cuando se retira un trabajo, se pierde la caché de Spark almacenada en ese trabajo. Por lo tanto, si el escalado automático está habilitado, hay cierta inestabilidad con la caché. A continuación, Spark tendría que volver a leer las particiones que faltan en el origen, según sea necesario.

Configuración del uso del disco

Para configurar la manera en que la caché de disco usa el almacenamiento local de los nodos de trabajo, especifique los siguientes valores de configuración de Spark durante la creación del clúster:

  • spark.databricks.io.cache.maxDiskUsage: espacio en disco por nodo reservado para datos en caché en bytes.
  • spark.databricks.io.cache.maxMetaDataCache: espacio en disco por nodo reservado para metadatos en caché en bytes.
  • spark.databricks.io.cache.compression.enabled: indica si los datos en caché se almacenan en formato comprimido.

Configuración de ejemplo:

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

Habilitación o deshabilitación de la caché de disco

Para habilitar y deshabilitar la caché de disco, ejecute lo siguiente:

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

La deshabilitación de la caché no conlleva la eliminación de los datos que ya están en el almacenamiento local. En su lugar, impide que las consultas agreguen nuevos datos a la caché y lean los datos de la caché.