Hbase 数据写入

写缓冲(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满

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值