
# 配置HDFS客户端元数据缓存提高读取性能
#### 操作场景
通过使用客户端缓存元数据块的位置，可以减少对NameNode的元数据查询次数，降低网络开销，提高客户端操作的响应速度，提高HDFS读取性能。
#### 约束与限制
- 本章节适用于MRS 3.x及后续版本。
- 此功能仅用于读取不经常修改的文件。因为在服务器端由某些其他客户端完成的数据修改，对于高速缓存的客户端将是不可见的，这可能导致从缓存中拿到的元数据是过期的。
 
#### 操作步骤
1. 登录FusionInsight Manager。 
   登录集群Manager具体操作，请参考[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
   
   
2. 选择"集群 \> 服务 \> HDFS \> 配置 \> 全部配置"。
3. 搜索以下参数名称，并根据需要修改参数值。 
   表1参数配置 
   | **参数**                                | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | **默认值** |
   |:---|:---|:---|
   | dfs.client.metadata.cache.enabled     | 是否开启块位置元数据的客户端缓存。 - true：开启  - false：关闭                                                                                                                                                                                                                                                                                                                                                                                                                | 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 | 缓存一次最多可保存的非过期数据条目。 取值范围：0\~65536                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | 65536   |
      
   
   
4. 保存修改的配置。保存完成后请重新启动配置过期的服务或实例以使配置生效。
![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
要在过期前完全清除客户端缓存，可调用*DFSClient#clearLocatedBlockCache()*。
用法如下所示。
```
FileSystem fs = FileSystem.get(conf);
    DistributedFileSystem dfs = (DistributedFileSystem) fs;
    DFSClient dfsClient = dfs.getClient();
    dfsClient.clearLocatedBlockCache();
```
