
# NameNode节点长时间满负载导致客户端无响应
#### 问题
当NameNode节点处于满负载、NameNode所在节点的CPU 100%耗尽时，导致NameNode无法响应，对于新连接到该NameNode的HDFS客户端，能够主备切换连接到另一个NameNode，进行正常的操作，而对于已经连接到该NameNode节点的HDFS客户端可能会长时间无响应，无法进行下一步操作。
#### 回答
目前出现上述问题时使用的是默认配置，如[表1]所示，HDFS客户端到NameNode的RPC连接存在keep alive机制，保持连接不会超时，尽力等待服务器的响应，因此导致已经连接的HDFS客户端的操作会长时间无响应。
对于已经长时间无响应的HDFS客户端，可以进行如下操作：
- 等待NameNode响应，一旦NameNode所在节点的CPU利用率回落，NameNode可以重新获得CPU资源时，HDFS客户端即可得到响应。
- 如果无法等待更长时间，需要重启HDFS客户端所在的应用程序进程，使得HDFS客户端重新连接空闲的NameNode。
解决措施：
为了避免该问题出现，可以在"*客户端安装路径*/HDFS/hadoop/etc/hadoop/core-site.xml"中做如下配置。
 表1参数说明 
| **参数**            | **描述**                                                                                                                                                                                                                                                      | **默认值** |
|:---|:---|:---|
| ipc.client.ping   | 当配置为true时，客户端会尽力等待服务端响应，定期发送ping消息，使得连接不会因为tcp timeout而断开。 当配置为false时，客户端会使用配置项"ipc.ping.interval"对应的值，作为timeout时间，在该时间内没有得到响应，即会超时。 在上述问题场景下，建议配置为false。 | true    |
| ipc.ping.interval | 当"ipc.client.ping"配置为true时，表示发送ping消息的周期。 当"ipc.client.ping"设置为false时，表示连接的超时时间。 在上述问题场景下，建议配置一个较大的超时时间，避免服务繁忙时的超时，建议配置为900000，单位为ms。                     | 60000   |
   
