HBase中如何解决Region Server Compact过程占用大量网络出口带宽的问题

HBase 0.92版本之后,Region Server的Compact过程根据待合并的文件大小分为small compaction和large compaction两种,由此可能导致在集群写入量大的时候Compact占用过多的网络出口带宽。本文将详细描述集群使用过程中遇到这一问题的排查过程及其解决方法。

1. 发现问题

HBase集群(版本为0.94.0)运行过程中,发现5台Region Server的网络出口带宽经常维持在100MB/s以上,接近到网卡的极限;同时Region Server的机器load负载也很高,高峰时候能够达到30~50。

2. 排查问题

1、集群实际运行过程中,观察到Region Server服务端的网卡,平均每台写入流量大概60MB/s(此时写入量已经很大了);读出流量90MB/s,有时甚至突破100MB/s(注:每台机器都是千兆网卡);

2、观察实际的写入数据量在每秒5w tps左右,单条记录平均大小为1KB,大概会占用50MB/s左右的网卡入口带宽请求量,和观察到的现象一致;

3、观察查询量在每秒6w qps左右,单条记录平均大小为1KB,大概会占用60MB/s左右的网卡出口带宽请求量,奇怪的是实际观察到有接近甚至超过100MB/s的网络出口带宽请求量,多出了40MB/s左右的网络出口带宽;

4、经分析排查确定导致上述过程的原因,可能是HBase服务端由于写入量过大频繁触发compaction过程,而compaction是需要读HBase数据的,因此占据了相当部分的网络出口带宽;

更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/extra/

5、结合对相关源码org/apache/hadoop/hbase/regionserver/CompactSplitThread.java的分析,决定对HBase集群配置做出变更(具体见下一小节),主要目的是减少compaction的发生;

6、接下来,观察到Region Server的网络利用率明显降低,一般进出口带宽能维持在70MB/s以下。

3. 解决问题

HBase 0.92版本之后增加了关于compact的配置选项,compact分为small compaction和large compaction两个线程池执行(默认都是各有1个线程,具体源代码见:org/apache/hadoop/hbase/regionserver/CompactSplitThread.java),由于compact过程需要从HBase集群读取数据,因此实际运行中导致了compact占用大量网络出口流量,解决方案为选择性地关闭small compaction或large compaction。有以下两种变更方式均可解决:

1)方案一

(1) 修改hbase.regionserver.thread.compaction.throttle为一个很大的值(如50GB),强制让所有compact都变为small compaction,减少compact的压力;

(2) 将small compaction和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://www.cnblogs.com/panfeng412/archive/2012/10/17/how-to-resolve-hbase-region-server-compaction-taking-up-too-much-network-bandwidth.html

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索hbase
, 集群
, java hbase
, 带宽
, hbase配置
, hadoop 集群hbase
, 集群hbase重构迁移
, compact
, 大量写入
, HBase数据库的操作
, 过程
small
hbase region compact、hbase compact、hbase major compact、hbase compact split、hbase 手动 compact,以便于您获取更多的相关知识。

时间: 2024-09-19 08:18:16

HBase中如何解决Region Server Compact过程占用大量网络出口带宽的问题的相关文章

解决adb server端口被占用的问题

先执行adb nodaemon server ,查看adb server的端口是多少 C:\Users\xxxx>adb nodaemon server   cannot bind 'tcp:5037' 再执行下netstat -ano | findstr "5037"   C:\Users\xxxxxx>netstat -ano | findstr "5037"     TCP    127.0.0.1:5037         0.0.0.0:0  

hbase源码系列(三)Client如何找到正确的Region Server

客户端在进行put.delete.get等操作的时候,它都需要数据到底存在哪个Region Server上面,这个定位的操作是通过HConnection.locateRegion方法来完成的. loc = hConnection.locateRegion(this.tableName, row.getRow()); 这里我们首先要讲hbase的两张元数据表-ROOT-和.META.表,它们一个保存着region的分部信息,一个保存着region的详细信息.在<hbase实战>这本书里面详细写了

如何解决 SQL Server 2000 中的连接问题

server|解决|问题 如何解决 SQL Server 2000 中的连接问题适用于 重要说明:本文包含有关修改注册表的信息.修改注册表之前,一定要备份注册表,并且一定要知道在发生问题时如何还原注册表.有关如何备份.还原和编辑注册表的信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章: 256986 Microsoft Windows 注册表说明 本任务的内容概要 解决连接问题 验证 DNS 设置 验证启用的协议和别名 验证 SQL Server 实例正在正确地侦听 解

SQL Server 2000安装时不出现安装界面,进程中存在解决

        在XP和Server 2003系统中安装SQL Server 2000过程中,点击安装后,一直不出现安装界面,查看进程中也有,一直无反应. 解决办法: 首先重新启动机器,或者任务管理器里面结束2个sql进程 1. 在 SQLServer 安装向导, 单击 取消 . 2. 启动注册表编辑器.单击 开始-->运行, 键入 regedit , 和然后 "确定". 3. 打开HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Contr

轻松解决SQL Server 2005中的常见问题

问题1:使用.net2005自带的SQL-Express连接不上. 解决方法: 1.网络防火墙阻止数据库连接: 2.默认SQL-Express没有启动Sa账户->下载一个management studio express界面工具管理SQL-Express 3.无线网络会出现根据机器名找不到SQL服务器的情况,直接用IP连接 4.服务端通过开始菜单打开->配置工具->SQL Server外围应用配置器->服务和连接的外围应用配置器->远程连接->右边选择"本地连

Android系统进程间通信(IPC)机制Binder中的Client获得Server远程接口过程源代码分析_Android

     在上一篇文章中,我们分析了Android系统进程间通信机制Binder中的Server在启动过程使用Service Manager的addService接口把自己添加到Service Manager守护过程中接受管理.在这一篇文章中,我们将深入到Binder驱动程序源代码去分析Client是如何通过Service Manager的getService接口中来获得Server远程接口的.Client只有获得了Server的远程接口之后,才能进一步调用Server提供的服务.       

Android系统进程间通信(IPC)机制Binder中的Server启动过程源代码分析_Android

        在前面一篇文章Android系统进程间通信(IPC)机制Binder中的Server和Client获得Service Manager接口之路中,介绍了在Android系统中Binder进程间通信机制中的Server角色是如何获得Service Manager远程接口的,即defaultServiceManager函数的实现.Server获得了Service Manager远程接口之后,就要把自己的Service添加到Service Manager中去,然后把自己启动起来,等待Cl

HBase中的一些注意事项

1. 安装集群前 配置SSH无密码登陆 DNS.HBase使用本地 hostname 才获得IP地址,正反向的DNS都是可以的.你还可以设置 hbase.regionserver.dns.interface 来指定主接口,设置hbase.regionserver.dns.nameserver 来指定nameserver,而不使用系统带的 安装NTP服务,并配置和检查crontab是否生效 操作系统调优,包括最大文件句柄,nproc hard 和 soft limits等等 conf/hdfs-s

ZooKeeper原理及其在Hadoop和HBase中的应用

ZooKeeper是一个开源的分布式协调服务,由雅虎创建,是Google Chubby的开源实现.分布式应用程序可以基于ZooKeeper实现诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知.集群管理.Master选举.分布式锁和分布式队列等功能. 简介 ZooKeeper是一个开源的分布式协调服务,由雅虎创建,是Google Chubby的开源实现.分布式应用程序可以基于ZooKeeper实现诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知.集群管理.Master选举.分布式锁