
# 使用活动缓存提升HDFS客户端连接性能
#### 操作场景
HDFS部署在具有多个NameNode实例的HA（High Availability）模式中，HDFS客户端需要依次连接到每个NameNode，以确定当前活动的NameNode，并将其用于客户端操作。
一旦识别出活动的NameNode，该NameNode的详细信息就可以被缓存并共享给在客户端机器中运行的所有客户端。此时，每个新客户端可以首先尝试从缓存加载活动的NameNode的详细信息，并将RPC调用保存到备用的NameNode。该机制在异常情况下具有显著优势，例如当备用的NameNode连接长时间不响应时，系统会将另一个NameNode切换为活动状态时，缓存的详细信息将被更新为当前活动的NameNode的信息。
#### 约束与限制
- 本章节适用于MRS 3.x及后续版本。
- 由HDFS客户端创建的缓存文件必须由其他客户端重新使用。因此，这些文件永远不会从本地系统中删除。若禁用该功能，可能需要进行手动清理。
 
#### 操作步骤
1. 登录FusionInsight Manager。 
   登录集群Manager具体操作，请参考[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
   
   
2. 选择"集群 \> 服务 \> HDFS \> 配置 \> 全部配置"。
3. 搜索以下参数名称，并根据需要修改参数值。 
   表1配置参数 
   | **参数**                                                | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | **取值样例** |
   |:---|:---|:---|
   | dfs.client.failover.proxy.provider.\[nameservice ID\] | 使用已通过的协议创建NameNode代理的Client Failover proxy provider类。 - org.apache.hadoop.hdfs.server.namenode.ha.BlackListingFailoverProxyProvider：可在HDFS客户端使用NameNode黑名单特性。  - org.apache.hadoop.hdfs.server.namenode.ha.ObserverReadProxyProvider：可使用从NameNode支持读的特性。  - org.apache.hadoop.hdfs.server.namenode.ha.AdaptiveFailoverProxyProvider：使用动态调整策略，根据NameNode的健康状态和负载情况选择最优节点进行读写。  - org.apache.hadoop.hdfs.server.namenode.ha.RequestHedgingProxyProvider：表示同时给多个NameNode发送请求，先返回的是主NameNode。  - org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider：根据配置文件中的设置来决定故障转移策略，允许用户自定义行为。   | 根据实际需要选择 |
   | dfs.client.failover.activeinfo.share.flag             | 启用缓存并将当前活动的NameNode的详细信息共享给其他客户端。默认值为"false"，表示不启用缓存。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | true     |
   | dfs.client.failover.activeinfo.share.path             | 指定将在机器中的所有客户端创建的共享文件的本地目录。如果要为不同用户共享缓存，该文件夹应具有必需的权限（如在给定目录中创建，读写缓存文件）。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | /tmp     |
   | dfs.client.failover.activeinfo.share.io.timeout.sec   | 控制超时的可选配置。用于在读取或写入缓存文件时获取锁定。如果在该时间内无法获取缓存文件上的锁定，则放弃尝试读取或更新缓存。单位为秒。 取值范围1\~3600，默认值为"5"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | 5        |
      
   
   
4. 保存修改的配置。保存完成后请重新启动配置过期的服务或实例以使配置生效。
 
