在Databricks上使用缓存优化性能

Databricks使用磁盘缓存,通过在节点的本地存储中使用快速中间数据格式创建远程Parquet数据文件的副本来加速数据读取。每当需要从远程位置获取文件时,数据就会自动缓存。然后在本地执行相同数据的连续读取,这将显著提高读取速度。缓存适用于所有Parquet数据文件(包括Delta Lake表)。

增量缓存重命名为磁盘缓存

Databricks上的磁盘缓存以前被称为Delta缓存和DBIO缓存。磁盘缓存行为是Databricks的专有特性。这个名字的改变是为了解决它是三角洲湖协议的一部分的困惑。行为在此重命名后保持不变,如下所述。

自动和手动缓存

Databricks磁盘缓存与Apache Spark缓存不同。Databricks建议大多数操作使用自动磁盘缓存。

启用磁盘缓存后,需要从远端获取的数据会自动添加到缓存中。这个过程是完全透明的,不需要任何操作。但是,若要预先将数据预加载到缓存中,可以使用缓存选择命令(见缓存数据的子集).使用Spark缓存时,必须手动指定要缓存的表和查询。

磁盘缓存包含远程数据的本地副本。它可以提高大量查询的性能,但不能用于存储任意子查询的结果。Spark缓存可以存储任何子查询数据的结果,也可以存储Parquet以外格式的数据(如CSV、JSON、ORC)。

磁盘缓存中的数据读取和操作速度比Spark缓存中的数据快。这是因为磁盘缓存使用高效的解压缩算法,并以最佳格式输出数据,以便使用全阶段代码生成进行进一步处理。

与Spark缓存不同,磁盘缓存不使用系统内存。由于现代ssd的高读取速度,磁盘缓存可以完全驻留在磁盘上,而不会对其性能产生负面影响。

总结

下表总结了磁盘缓存和Apache Spark缓存之间的主要区别,以便您可以为您的工作流程选择最佳工具:

功能

磁盘高速缓存

Apache Spark缓存

存储为

工作节点上的本地文件。

内存中块,但它取决于存储级别。

应用于

存储在S3、ABFS和其他文件系统上的任何Parquet表。

任何数据帧或RDD。

触发

自动地,在第一次读取时(如果启用了缓存)。

手动,需要修改代码。

评估

懒洋洋地。

懒洋洋地。

力缓存

缓存选择命令

.cache+任何动作来实现缓存和.persist

可用性

可以通过配置标志启用或禁用,在某些节点类型上默认启用。

总是可用的。

驱逐

自动在LRU方式或任何文件更改时,手动重新启动集群。

自动在LRU时尚,手动与unpersist

磁盘缓存一致性

当数据文件被创建、删除、修改或覆盖时,磁盘缓存会自动检测并相应地更新其内容。您可以写入、修改和删除表数据,而不需要显式地使缓存数据无效。任何过期的条目都将自动失效并从缓存中删除。

使用磁盘缓存

使用磁盘缓存的推荐(也是最简单的)方法是在配置集群时选择带有SSD卷的工作者类型。为磁盘缓存启用和配置了这些工作者。

磁盘缓存配置为最多使用工作节点提供的本地ssd上可用空间的一半。有关配置选项,请参见配置磁盘缓存

缓存数据的子集

要显式地选择要缓存的数据子集,请使用以下语法:

缓存选择column_name(,column_name…]db_name)table_name在哪里boolean_expression

您不需要使用此命令来使磁盘缓存正常工作(数据将在第一次访问时自动缓存)。但是当您需要一致的查询性能时,它会很有帮助。

有关示例和更多详细信息,请参见

配置磁盘缓存

Databricks建议您选择缓存加速的工作实例类型用于您的集群。这样的实例会自动为磁盘缓存进行优化配置。

请注意

当一个worker被退役时,存储在该worker上的Spark缓存将丢失。因此,如果启用了自动缩放,缓存就会有一些不稳定性。然后,Spark需要根据需要从源代码中重新读取丢失的分区。

配置磁盘使用情况

要配置磁盘缓存如何使用工作节点的本地存储,请指定以下内容火花配置创建集群时的设置:

  • spark.databricks.io.cache.maxDiskUsage:每个节点为缓存数据预留的磁盘空间,单位为字节

  • spark.databricks.io.cache.maxMetaDataCache:每个节点用于缓存元数据的磁盘空间,单位为字节

  • spark.databricks.io.cache.compression.enabled:缓存数据是否以压缩格式存储

示例配置:

spark.databricks.io.cache.maxDiskUsage 50克spark.databricks.io.cache.maxMetaDataCache 1克spark.databricks.io.cache.compression.enabled假

启用/禁用磁盘缓存

开启或关闭磁盘缓存,使用命令:

火花相依“spark.databricks.io.cache.enabled”"[真|假]"

禁用缓存不会导致删除本地存储中已经存在的数据。相反,它阻止查询向缓存中添加新数据和从缓存中读取数据。