优化性能和缓存数据砖

砖使用磁盘缓存来加快创建远程铺数据的副本文件读取的数据节点的本地存储中间数据格式使用快。数据缓存自动当一个文件从远程获取。连续读取相同的数据然后在本地执行,从而显著提高阅读速度。缓存适用于所有铺数据文件(包括三角洲湖表)。

δ缓存重新命名为磁盘缓存

磁盘缓存数据砖曾称为δ缓存和DBIO缓存。磁盘缓存行为是一个专有的砖的特性。这个名字改变寻求解决困惑,三角洲湖协议的一部分。与这重命名行为保持不变,描述如下。

自动和手动缓存

砖磁盘缓存不同于Apache火花缓存。砖建议使用自动磁盘缓存对于大多数操作。

当启用了磁盘高速缓存,数据需要从远程数据源获取自动添加到缓存中。这个过程是完全透明,不需要任何行动。然而,事先预加载数据到缓存,您可以使用缓存选择命令(见缓存数据的一个子集)。当你使用火花缓存,您必须手动指定缓存表和查询。

远程数据的磁盘高速缓存包含本地副本。它可以提高广泛的查询的性能,但不能用于存储任意子查询的结果。火花缓存可以存储任何子查询的结果数据和数据存储在拼花以外的其他格式(如CSV、JSON和兽人)。

磁盘缓存中存储的数据可以读取和操作速度比火花缓存中的数据。这是因为磁盘缓存使用高效的压缩算法和最优输出数据格式使用舞台代码生成进行进一步的处理。

与火花缓存,磁盘缓存不使用系统内存。由于现代ssd的阅读速度,较高的磁盘缓存可以完全于磁盘上没有对其性能产生负面影响。

总结

下表总结了关键差异磁盘和Apache火花缓存,这样你可以选择最好的工具来你的工作流程:

功能

磁盘高速缓存

Apache火花缓存

存储为

一个工人节点上本地文件。

内存块,但这取决于存储水平。

应用于

任何拼花表存储在S3,沛富和其他文件系统。

任何DataFrame或抽样。

触发

自动,第一次读到(如果启用了缓存)。

手动,需要更改代码。

评估

懒洋洋地。

懒洋洋地。

力缓存

缓存选择命令

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

可用性

与配置旗帜,可以启用或禁用默认启用特定节点类型。

总是可用的。

驱逐

自动在LRU时尚或任何文件变化,手动重新启动集群。

自动在LRU时尚,手动unpersist

磁盘高速缓存一致性

磁盘缓存时自动检测数据文件创建、删除、修改或覆盖,并相应地更新其内容。您可以编写、修改和删除表数据不需要显式地缓存数据失效。任何过期条目自动失效并驱逐出缓存。

使用磁盘缓存

推荐使用磁盘缓存(简单的)方法是选择一个工人类型与SSD卷当你配置集群。这些工人是磁盘缓存启用和配置。

磁盘缓存配置为使用最多一半的可用空间在本地工人提供的ssd节点。配置选项,请参阅配置磁盘高速缓存

缓存数据的一个子集

显式地选择一个子集的数据缓存,使用下面的语法:

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

您不需要使用该命令磁盘高速缓存的正常工作(数据将首次访问时自动缓存)。但是它是很有用的,当你需要一致的查询性能。

例子和更多的细节,请参阅

配置磁盘高速缓存

砖建议你选择cache-accelerated工人实例类型为您的集群。这种情况下会自动配置优化磁盘高速缓存。

请注意

当工人退役,火花缓存存储在职工失去。如果启用了自动定量,有一些不稳定的缓存。火花会根据需要从源代码需要重读丢失的分区。

配置磁盘使用情况

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

  • spark.databricks.io.cache.maxDiskUsage:每个节点的磁盘空间用于缓存数据字节

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

  • spark.databricks.io.cache.compression.enabled:缓存的数据应该存储在压缩格式

示例配置:

spark.databricks.io.cache.maxDiskUsage50gspark.databricks.io.cache.maxMetaDataCache1gspark.databricks.io.cache.compression.enabled假

启用或禁用磁盘缓存

启用和禁用磁盘缓存,运行:

火花相依(“spark.databricks.io.cache.enabled”,“真|假”)

禁用缓存不会导致下降已经存在于本地存储的数据。相反,它可以防止查询添加新的数据缓存和从缓存中读取数据。