分享

hbase的刷新问题

wdx_827 发表于 2017-6-30 11:27:54 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 3 5725
----最近发现hbase的一个现象,比如批量向一个表中批量插入60条数据,插入完成后,立即进行查询刚刚插入的60条记录,发现可能之查询到一部分数据,但再过一会再进行查询就能够得到60条正确结果。这中情况会经常出现。很容易复现出来。----对应这种现象感觉是hbase哪里没有及时刷新导致的,哪位能解释一下原因吗,是否能够避免。



已有(3)人评论

跳转到指定楼层
nextuser 发表于 2017-6-30 15:10:44
这个需要了解hbase的Flush机制。hbase并不是执行一条就插入一条。而是MemStore达到某个值之后,一起执行。所以可能会产生插入后,需要等待一定的时间才能看到。
更多参考
HBase Flush操作流程以及对读写服务的影响
http://www.aboutyun.com/forum.php?mod=viewthread&tid=15191


回复

使用道具 举报

wdx_827 发表于 2017-7-2 10:51:04
感谢nextuser的回复,对应hbase插入数据先写入到memstore的过程,hbase难道读取的时候难道不检查内存中命中的数据吗之查询hdfs的?看了你发的链接,看的不是特别明白,里面提到跟新数据时候加上了updatesLock的写锁,是不是此时,读取时候由于updatesLock的原因导致的数据读取的不是最新的啊?
原文中:
HRegion执行Flush操作,实际上是把MemStore的内容全部刷入hdfs的过程。虽然,目前更新操作已经通过加写锁阻塞,可是读操作仍然可以继续,因此,在memstore执行snapshot的过程中,通过reference,snapshot会指向kvset,然后给kvset指向一个全新的内存区域。代码如下:



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条