文档首页/ MapReduce服务 MRS/ 组件操作指南(普通版)/ 使用HBase/ HBase故障排除/ HBase占用网络端口,连接数过大会导致其他服务不稳定
更新时间:2024-07-24 GMT+08:00

HBase占用网络端口,连接数过大会导致其他服务不稳定

问题

HBase占用网络端口,连接数过大会导致其他服务不稳定。

回答

使用操作系统命令lsof或者netstat发现大量TCP连接处于CLOSE_WAIT状态,且连接持有者为HBase RegionServer,可能导致网络端口耗尽或HDFS连接超限,那样可能会导致其他服务不稳定。HBase CLOSE_WAIT现象为HBase机制。

HBase CLOSE_WAIT产生原因:HBase数据以HFile形式存储在HDFS上,这里可以叫StoreFiles,HBase作为HDFS的客户端,HBase在创建StoreFile或启动加载StoreFile时创建了HDFS连接,当创建StoreFile或加载StoreFile完成时,HDFS方面认为任务已完成,将连接关闭权交给HBase,但HBase为了保证实时响应,有请求时就可以连接对应数据文件,需要保持连接,选择不关闭连接,所以连接状态为CLOSE_WAIT(需客户端关闭)。

什么时候会创建StoreFile:当HBase执行Flush时。

什么时候执行Flush:HBase写入数据首先会存在内存memstore,只有内存使用达到阈值或手动执行flush命令时会触发flush操作,将数据写入HDFS。

解决方法

由于HBase连接机制,若想减小HBase端口占用,则需控制StoreFile数量,具体可以通过触发HBase的compaction动作完成,即触发HBase文件合并,方法如下:

方法1:使用HBase shell客户端,在客户端手动执行major_compact操作。

方法2:编写HBase客户端代码,调用HBaseAdmin类中的compact方法触发HBase的compaction动作。

如果compact无法解决HBase端口占用现象,说明HBase使用情况已经达到瓶颈,需考虑如下几点:

  • table的Region数初始设置是否合适。
  • 是否存在无用数据。

若存在无用数据,可删除对应数据以减小HBase存储文件数量,若以上情况都不满足,则需考虑扩容。