使用客户端元数据缓存提高读取性能
操作场景
通过使用客户端缓存元数据块的位置来提高HDFS读取性能。
此功能仅用于读取不经常修改的文件。因为在服务器端由某些其他客户端完成的数据修改,对于高速缓存的客户端将是不可见的,这可能导致从缓存中拿到的元数据是过期的。
操作步骤
设置参数的路径:
在FusionInsight Manager页面中,选择“集群 > 待操作集群的名称 > 服务 > HDFS > 配置”,选择“全部配置”,并在搜索框中输入参数名称。
参数 |
描述 |
默认值 |
---|---|---|
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”开头的所有文件。
说明:
|
- |
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();