Microsoft Fabric 中的智能缓存

智能缓存功能在后台无缝工作,并且会缓存数据,以帮助加快在 Microsoft Fabric 中执行 Apache Spark 作业的速度,因为它通过快捷方式从 OneLake 或 Azure Data Lake Storage (ADLS) Gen2 存储读取。 此功能还会自动检测对基础文件的更改,并自动刷新缓存中的文件,从而提供最新的数据。 当缓存大小达到其限制时,缓存会自动释放读取次数最少的数据,以便为较新的数据提供空间。 此功能可以提高存储在可用缓存中的文件的后续读取的性能(最多可提高 60%),因而可以降低总拥有成本。

当 Microsoft Fabric 中的 Apache Spark 引擎从湖屋查询文件或表时,它会调用远程存储来读取基础文件。 每次查询请求读取相同的数据时,Spark 引擎必须每次都要调用远程存储。 此冗余进程会增加延迟,延长总处理时间。 Spark 具有一个缓存要求,必须手动设置并释放缓存,以最大程度地减少延迟并提高整体性能。 但是,如果基础数据发生更改,则此要求可能会导致数据过时。

智能缓存可在每个 Spark 节点(数据文件缓存在 SSD 中)上分配的缓存存储空间中自动缓存每个读取,从而简化了该过程。 每次请求某个文件时,都会查看本地节点缓存中是否存在该文件,并与远程存储中的标记进行比较,以确定文件是否过时。 如果该文件不存在或已过时,Spark 会读取该文件并将其存储在缓存中。 当缓存已满时,将从缓存中逐出上次访问时间最早的文件,为更新的文件腾出空间。

对于智能缓存,每个节点都有一个缓存。 如果使用中型节点并在单个节点上运行两个小型执行程序,则两个执行程序共享同一缓存。 此外,如果多个查询访问相同的数据或数据文件,那么这种数据文件级缓存可以使它们使用同一个缓存。

工作原理

在 Microsoft Fabric(运行时 1.1 和 1.2)中,默认情况下,对于缓存大小为 50% 的所有工作区的所有 Spark 池,都将启用智能缓存。 可用存储的实际大小和每个节点上的缓存大小取决于节点系列和节点大小。

何时使用智能缓存

在下列情况下,此功能对你有利:

  • 工作负荷需要多次读取同一个文件,并且文件大小不超出缓存大小。

  • 工作负荷使用 Delta Lake 表、Parquet 或 CSV 文件格式。

在下列情况下,智能缓存不存在优势:

  • 正在读取的文件超过缓存大小。 如果是这样,文件的开头可能会被逐出,并且后续查询必须从远程存储重新获取数据。 在这种情况下,智能缓存没有任何优势,你可能需要增加缓存大小和/或节点大小。

  • 工作负荷需要大量随机处理。 禁用智能缓存会释放可用空间,以防止作业由于存储空间不足而失败。

启用和禁用智能缓存

要在会话中禁用或启用智能缓存,可以在笔记本中运行以下代码,也可以在工作区或环境项级别设置此配置。

spark.conf.set("spark.synapse.vegas.useCache", "false/true")