更新时间:2022-02-22 GMT+08:00

使用客户端元数据缓存提高读取性能

操作场景

通过使用客户端缓存元数据块的位置来提高HDFS读取性能。

此功能仅用于读取不经常修改的文件。因为在服务器端由某些其他客户端完成的数据修改,对于高速缓存的客户端将是不可见的,这可能导致从缓存中拿到的元数据是过期的。

本章节适用于MRS 3.x及后续版本。

操作步骤

设置参数的路径:

在FusionInsight Manager页面中,选择“集群 > 待操作集群的名称 > 服务 > HDFS > 配置”,选择“全部配置”,并在搜索框中输入参数名称。

表1 参数配置

参数

描述

默认值

dfs.client.metadata.cache.enabled

启用/禁用块位置元数据的客户端缓存。将此参数设置为“true”,搭配“dfs.client.metadata.cache.pattern”参数以启用缓存。

false

dfs.client.metadata.cache.pattern

需要缓存的文件路径的正则表达式模式。只有这些文件的块位置元数据被缓存,直到这些元数据过期。此配置仅在参数“dfs.client.metadata.cache.enabled”设置为“true”时有效。

示例:“/test.*”表示读取其路径是以“/test”开头的所有文件。

说明:
  • 为确保一致性,配置特定模式以仅缓存其他客户端不经常修改的文件。
  • 正则表达式模式将仅验证URI的path部分,而不验证在Fully Qualified路径情况下的schema和authority。

-

dfs.client.metadata.cache.expiry.sec

缓存元数据的持续时间。缓存条目在该持续时间过期后失效。即使在缓存过程中经常使用的元数据也会发生失效。

配置值可采用时间后缀s/m/h表示,分别表示秒,分钟和小时。

说明:

若将该参数配置为“0s”,将禁用缓存功能。

60s

dfs.client.metadata.cache.max.entries

缓存一次最多可保存的非过期数据条目。

65536

要在过期前完全清除客户端缓存,可调用DFSClient#clearLocatedBlockCache()

用法如下所示。

    FileSystem fs = FileSystem.get(conf);
    DistributedFileSystem dfs = (DistributedFileSystem) fs;
    DFSClient dfsClient = dfs.getClient();
    dfsClient.clearLocatedBlockCache();