更新时间:2025-07-12 GMT+08:00

配置客户端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仍会被添加至黑名单。

图1 NameNode blacklisting状态图

约束与限制

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

配置NameNode故障转移机制

  1. 登录FusionInsight Manager。

    登录集群Manager具体操作,请参考访问MRS集群Manager

  2. 选择“集群 > 服务 > HDFS > 配置 > 全部配置”。
  3. 搜索以下参数名称,并根据需要修改参数值。

    表1 NameNode 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服务。