场景:BindException - 地址已在 Azure HDInsight 中使用

本文介绍在与 Azure HDInsight 群集交互时出现的问题的故障排除步骤和可能的解决方法。

问题

针对 Apache HBase 区域服务器执行的重启操作无法完成。 从区域服务器启动失败的工作器节点上 /var/log/hbase 目录中的 region-server.log,可能会看到如下错误消息:

Caused by: java.net.BindException: Problem binding to /10.2.0.4:16020 : Address already in use
...

Caused by: java.net.BindException: Address already in use
...

原因

在高工作负荷活动期间重启 Apache HBase 区域服务器。 以下是当用户通过 Apache Ambari UI 在 HBase 区域服务器上发起重启操作时,后台发生的情况:

  1. Ambari 代理向区域服务器发送停止请求。

  2. Ambari 代理等待 30 秒让区域服务器正常关闭

  3. 如果应用程序继续与区域服务器进行连接,该服务器不会立即关闭。 在关闭之前,30 秒超时就会到期。

  4. 30 秒之后,Ambari 代理向区域服务器发送强制终止 (kill -9) 命令。

  5. 由于此关闭很突然,尽管区域服务器进程已被终止,但与该进程关联的端口可能还没有释放,这最终会导致 AddressBindException

解决方法

在发起重启之前,减少 HBase 区域服务器上的负载。 另外,最好是先刷新所有表。 有关如何刷新表的参考信息,请参阅 HDInsight HBase:如何通过刷新表来改善 Apache HBase 群集重启时间

或者,尝试使用以下命令,手动重启工作器节点上的区域服务器:

sudo su - hbase -c "/usr/hdp/current/hbase-regionserver/bin/hbase-daemon.sh stop regionserver"
sudo su - hbase -c "/usr/hdp/current/hbase-regionserver/bin/hbase-daemon.sh start regionserver"

后续步骤

如果你的问题未在本文中列出,或者无法解决问题,请访问以下渠道以获取更多支持:

  • 如果需要更多帮助,可以从 Azure 门户提交支持请求。 从菜单栏中选择“支持” ,或打开“帮助 + 支持” 中心。 有关更多详细信息,请参阅如何创建 Azure 支持请求。 Microsoft Azure 订阅中带有对订阅管理和计费支持的访问权限,技术支持通过 Azure 支持计划之一提供。