Azure Synapse Analytics 中的智能缓存

智能缓存在后台无缝工作并缓存数据,有助于加快 Spark 从 ADLS Gen2 数据湖读取数据时的执行速度。 它还会自动检测对基础文件的更改,并自动刷新缓存中的文件,为你提供最新的数据,以及缓存大小达到其限制时,缓存将自动释放最少的读取数据,以便为最近的数据提供空间。 此功能可以提高存储在可用缓存中的文件的后续读取的性能,对 Parquet 文件的提高幅度高达 65%,对 CSV 文件的提高幅度高达 50%,因而可以降低总拥有成本。

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

Synapse 智能缓存通过在每个 Spark 节点上分配的缓存存储空间内自动缓存每个读取来简化此过程。 每个文件请求都会检查缓存中是否存在该文件,并比较远程存储中的标记,以确定该文件是否过时。 如果文件不存在或文件已过时,Spark 将读取该文件并将其存储在缓存中。 当缓存已满时,具有最早上次访问时间的文件将从缓存中逐出,以允许更新的文件。

Synapse 缓存是每个节点的单个缓存。 如果使用中型节点并在单个中型节点上运行两个小型执行程序,则这两个执行程序将共享同一缓存。

启用或禁用缓存

可以根据每个 Apache Spark 池可用的磁盘总大小百分比调整缓存大小。 默认情况下,缓存设置为禁用状态,但只需将滑块从0(禁用)移动到所需百分比来设置缓存大小,即可启用缓存。 考虑到数据随机缓存的情况,我们会至少保留 20% 的可用磁盘空间。 对于频繁重组工作负荷,可以减少缓存大小或禁用缓存。 建议从 50% 缓存大小开始,并根据需要进行调整。 请务必注意,如果工作负荷需要本地 SSD 上的大量磁盘空间进行随机缓存或 RDD 缓存,请考虑减小缓存大小,以减少由于存储不足而失败的可能性。 可用存储的实际大小和每个节点上的缓存大小将取决于节点系列和节点大小。

为新的 Spark 池启用缓存

创建新的 Spark 池时,请在 “其他设置 ”选项卡下浏览,找到可移动到首选大小的 智能缓存滑块 以启用该功能。

如何在创建新的 Spark 池期间启用智能缓存

为现有 Spark 池启用/禁用缓存

对于现有的 Spark 池,请浏览到您选择的 Apache Spark 池的 缩放设置。要启用它,请将 滑块 移动到一个大于 0 的值;要禁用它,请将 滑块 移动到 0。

如何启用或禁用现有 Spark 池的智能缓存

更改现有 Spark 池的缓存大小

若要更改池的智能缓存大小,如果池中有活动会话存在,则必须强制重启。 如果 Spark 池具有活动会话,则会显示 “强制新设置”。 单击 复选框 ,然后选择“ 应用 ”以自动重启会话。

更改智能缓存设置后强制重启会话

在会话中启用和禁用缓存

通过在笔记本中运行以下代码,在会话中轻松禁用智能缓存:

   %spark 

   spark.conf.set("spark.synapse.vegas.useCache", "false") 
   %pyspark 

   spark.conf.set('spark.synapse.vegas.useCache', 'false') 

通过运行以下代码来启用它:

   %spark 

   spark.conf.set("spark.synapse.vegas.useCache", "true") 
   %pyspark 

   spark.conf.set('spark.synapse.vegas.useCache', 'true') 

何时使用智能缓存以及何时不使用?

如果你符合以下条件,此功能将对你有利:

  • 工作负荷需要多次读取同一个文件,并且文件大小可以容纳到缓存中。

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

  • 你在 Azure Synapse 上使用 Apache Spark 3 或更高版本。

如果出现以下问题,则看不到此功能的好处:

  • 你正在读取超出缓存大小的文件,因为文件的开头可能会被逐出,后续查询必须从远程存储中重新引用数据。 在这种情况下,你看不到智能缓存的任何好处,你可能希望增加缓存大小和/或节点大小。

  • 工作负荷需要大量的数据重排,那么禁用智能缓存可以释放可用空间,防止任务因存储空间不足而失败。

  • 你使用的是 Spark 3.1 池,需要将池升级到最新版本的 Spark。

了解详细信息

若要了解有关 Apache Spark 的详细信息,请参阅以下文章:

了解如何配置 Spark 会话设置

后续步骤

Apache Spark 池提供开源大数据计算功能,可在其中加载、建模、处理和分发数据,以便更快地获得分析见解。 若要详细了解如何创建资源以运行 Spark 工作负载,请访问以下教程: