HBase 0.92版本以后,RegionServer的Compact过程根据待合并的文件大小分为smallcompaction和large compaction两种,由此可能致使在集群写入量大的时候Compact占用过多的网络出口带宽。本文将详细描述集群使用过程当中遇到这一问题的排查过程及其解决方法。java 1. 发现问题HBase集群(版本为0.94.0)运行过程当中,发现5台Region Server的网络出口带宽常常维持在100MB/s以上,接近到网卡的极限;同时Region Server的机器load负载也很高,高峰时候可以达到30~50。apache 2. 排查问题一、集群实际运行过程当中,观察到RegionServer服务端的网卡,平均每台写入流量大概60MB/s(此时写入量已经很大了);读出流量90MB/s,有时甚至突破100MB/s(注:每台机器都是千兆网卡);微信 二、观察实际的写入数据量在每秒5w tps左右,单条记录平均大小为1KB,大概会占用50MB/s左右的网卡入口带宽请求量,和观察到的现象一致;网络 三、观察查询量在每秒6w qps左右,单条记录平均大小为1KB,大概会占用60MB/s左右的网卡出口带宽请求量,奇怪的是实际观察到有接近甚至超过100MB/s的网络出口带宽请求量,多出了40MB/s左右的网络出口带宽;oop 四、经分析排查肯定致使上述过程的缘由,多是HBase服务端因为写入量过大频繁触发compaction过程,而compaction是须要读HBase数据的,所以占据了至关部分的网络出口带宽;spa 五、结合对相关源码org/apache/hadoop/hbase/regionserver/CompactSplitThread.java的分析,决定对HBase集群配置作出变动(具体见下一小节),主要目的是减小compaction的发生;线程 六、接下来,观察到RegionServer的网络利用率明显下降,通常进出口带宽能维持在70MB/s如下。orm 3. 解决问题HBase 0.92版本以后增长了关于compact的配置选项,compact分为small compaction和large compaction两个线程池执行(默认都是各有1个线程,具体源代码见:org/apache/hadoop/hbase/regionserver /CompactSplitThread.java),因为compact过程须要从HBase集群读取数据,所以实际运行中致使了compact占用大 量网络出口流量,解决方案为选择性地关闭smallcompaction或large compaction。有如下两种变动方式都可解决:server 1)方案一xml (1) 修改hbase.regionserver.thread.compaction.throttle为一个很大的值(如50GB),强制让全部compact都变为small compaction,减小compact的压力; (2) 将smallcompaction和large compaction线程数均设置为1,减小compact的压力(可不配置,系统默认也会将其初始化为1)。 操做步骤: 准备hbase-site.xml文件,添加或修改以下选项: <property> <name>hbase.regionserver.thread.compaction.throttle</name> <value>53687091200</value> </property> <property> <name>hbase.regionserver.thread.compaction.small</name> <value>1</value> </property> <property> <name>hbase.regionserver.thread.compaction.large</name> <value>1</value> </property> 重启集群使配置生效。 2)方案二 将small compaction线程数均设置为0,从而关闭small compaction,只剩下large compaction,也可减小compact的压力。 操做步骤: 准备hbase-site.xml文件,添加或修改以下选项: <property> <name>hbase.regionserver.thread.compaction.small</name> <value>0</value> </property> 重启集群使配置生效。 更多精彩内容请关注:http://bbs.superwu.cn 关注超人学院微信二维码: |