
# 配置客户端NameNode黑名单功能
#### 操作场景
在系统缺省场景中，一旦某进程中的一个NameNode发生故障，在同一进程中的所有HDFS客户端实例都会尝试再次连接NameNode，导致上层应用长时间等待超时。当位于同一JVM进程中的客户端对无法访问的NameNode进行连接时，会对系统造成负担。
为了避免以上问题，MRS集群提供了NameNode黑名单功能（BlackListingFailoverProxyProvider），在该场景中，故障的NameNode将被记录至一个列表中，DFSClient会利用这些信息，防止客户端再次连接这些NameNode。
通过合理配置HDFS客户端连接策略机制，可以确保HDFS客户端在NameNode故障时能够快速、可靠地切换到新的Active节点，提高集群的可用性。
例如有如下集群配置：
- NameNode：nn1、nn2
- dfs.client.failover.connection.retries：20（客户端在尝试连接到新的Active NameNode时的重试次数。）
- 单JVM中的进程：10个客户端
如果当前处于active状态的nn1无法访问，client1将会对nn1进行20次重新连接尝试，之后发生故障转移，client1将会连接至nn2。
与此相同，client2至client10也会在对nn1进行20次重新连接后连接至nn2。这样会延长NameNode的整体故障恢复时间。
针对该情况，当client1试图连接当前处于active状态的nn1，但其已经发生故障时，nn1将会被添加至黑名单列表，这样其余client就不会再次连接nn1，而是会选择连接nn2。
若在任一时刻，**所有NameNode都被添加至黑名单，则其内容会被清空**，client会按照初始的NameNode列表重新尝试连接。若再次出现任何故障，NameNode仍会被添加至黑名单。
图1NameNode blacklisting状态图   
![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002331549661.png "点击放大")
#### 约束与限制
本章节适用于MRS 3.x及后续版本。
#### 配置NameNode故障转移机制
1. 登录FusionInsight Manager。 
   登录集群Manager具体操作，请参考[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
   
   
2. 选择"集群 \> 服务 \> HDFS \> 配置 \> 全部配置"。
3. 搜索以下参数名称，并根据需要修改参数值。 
   表1NameNode blacklisting的相关参数 
   | **参数**                                                  | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | **配置示例**                                                                    |
   |:---|:---|:---|
   | dfs.client.failover.proxy.provider.*\[nameservice ID\]* | 用于指定HDFS客户端在NameNode故障转移时如何获取代理连接。 - org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider：通过ZooKeeper获取当前Active NameNode的状态。  - org.apache.hadoop.hdfs.server.namenode.ha.BlackListingFailoverProxyProvider：在ConfiguredFailoverProxyProvider 的基础上增加了节点黑名单机制，能够自动将连续失败的NameNode暂时列入黑名单，避免重复尝试连接不可用的节点，从而提升故障转移的效率。  - org.apache.hadoop.hdfs.server.namenode.ha.AdaptiveFailoverProxyProvider：默认值，通过自适应学习算法动态优化故障转移策略，能够根据历史性能数据智能选择最优NameNode进行连接。  - org.apache.hadoop.hdfs.server.namenode.ha.RequestHedgingProxyProvider：通过请求对冲（Request Hedging）机制提升读操作的性能和可靠性。该机制会同时向多个NameNode发送相同请求，并采用最先响应的结果，有效减少因个别节点延迟或故障导致的请求超时。   | org.apache.hadoop.hdfs.server.namenode.ha.BlackListingFailoverProxyProvider |
      
   
   
4. 单击"保存"使配置生效。无需重启HDFS服务。
 
