优化性能和缓存数据砖
砖使用磁盘缓存来加快创建远程铺数据的副本文件读取的数据节点的本地存储中间数据格式使用快。数据缓存自动当一个文件从远程获取。连续读取相同的数据然后在本地执行,从而显著提高阅读速度。缓存适用于所有铺数据文件(包括三角洲湖表)。
自动和手动缓存
砖磁盘缓存不同于Apache火花缓存。砖建议使用自动磁盘缓存对于大多数操作。
当启用了磁盘高速缓存,数据需要从远程数据源获取自动添加到缓存中。这个过程是完全透明,不需要任何行动。然而,事先预加载数据到缓存,您可以使用缓存选择
命令(见缓存数据的一个子集)。当你使用火花缓存,您必须手动指定缓存表和查询。
远程数据的磁盘高速缓存包含本地副本。它可以提高广泛的查询的性能,但不能用于存储任意子查询的结果。火花缓存可以存储任何子查询的结果数据和数据存储在拼花以外的其他格式(如CSV、JSON和兽人)。
磁盘缓存中存储的数据可以读取和操作速度比火花缓存中的数据。这是因为磁盘缓存使用高效的压缩算法和最优输出数据格式使用舞台代码生成进行进一步的处理。
与火花缓存,磁盘缓存不使用系统内存。由于现代ssd的阅读速度,较高的磁盘缓存可以完全于磁盘上没有对其性能产生负面影响。
总结
下表总结了关键差异磁盘和Apache火花缓存,这样你可以选择最好的工具来你的工作流程:
功能 |
磁盘高速缓存 |
Apache火花缓存 |
---|---|---|
存储为 |
一个工人节点上本地文件。 |
内存块,但这取决于存储水平。 |
应用于 |
任何拼花表存储在S3,沛富和其他文件系统。 |
任何DataFrame或抽样。 |
触发 |
自动,第一次读到(如果启用了缓存)。 |
手动,需要更改代码。 |
评估 |
懒洋洋地。 |
懒洋洋地。 |
力缓存 |
|
|
可用性 |
与配置旗帜,可以启用或禁用默认启用特定节点类型。 |
总是可用的。 |
驱逐 |
自动在LRU时尚或任何文件变化,手动重新启动集群。 |
自动在LRU时尚,手动 |
使用磁盘缓存
推荐使用磁盘缓存(简单的)方法是选择一个工人类型与SSD卷当你配置集群。这些工人是磁盘缓存启用和配置。
磁盘缓存配置为使用最多一半的可用空间在本地工人提供的ssd节点。配置选项,请参阅配置磁盘高速缓存。
缓存数据的一个子集
显式地选择一个子集的数据缓存,使用下面的语法:
缓存选择column_name(,column_name,…]从(db_name)table_name(在哪里boolean_expression]
您不需要使用该命令磁盘高速缓存的正常工作(数据将首次访问时自动缓存)。但是它是很有用的,当你需要一致的查询性能。
例子和更多的细节,请参阅
砖运行时7。x,上图:缓存选择
配置磁盘高速缓存
砖建议你选择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假