Hbase 数据写入

本文介绍了HBase中WriteBuffer的工作原理及配置方法。WriteBuffer用于缓存客户端提交的Put操作,减少与RegionServer的通信次数,从而提高性能。文章讨论了如何控制WriteBuffer的大小以避免内存溢出,并说明了其提交给RegionServer的几种触发条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写缓冲(Write Buffer)

对于一个put操作来说,每次用户通过Htable.add(put)或者Htable.add(List)来提交一个或者一组put,就要和Region Server通信一次。这样开销太大,因此引入写缓冲的概念。当Put
操作提交时,并不是直接提交给Region Server,而是简单的写入到Write Buffer中。只有Write Buffer满了,才被按照Region Server分组,并将一组一次性提交给对应的RS。
这种做法带来了数据一致性的问题:当数据被写入Write Buffer时,从客户端来看,认为数据写入操作已经完成了。但其实数据只是在缓冲中。这时,如果客户下线的话,数据就会丢失。
因此是否使用Write Buffer是由用户控制的,Write Buffer的大小也是可以控制的。
做法:

HTable.setAutoFlush(false);
HTable.setWriteBufferSize(123123123);

WriteBuffer的大小缺省值是每个客户端线程2MB。需要注意的时,因为Hbase支持高并发,所以常见的Hbase客户端访问Hbase都是多线程的。
如当一个节点上的应用程序有100个线程作为Hbase客户端访问HBase,此时就需要100*2MB=200MB的空间作为Write Buffer。因此,要合理设置WriteBuffer的大小,防止OutOfMemoryError。

WriteBuffer会在以下几种情况下提交给对应的Region Server
1)用户调用Htable.flushCommits();
2)用户调用Htable.close();方法关闭客户端
3)Write Buffer满

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值