hbase的刷新问题
----最近发现hbase的一个现象,比如批量向一个表中批量插入60条数据,插入完成后,立即进行查询刚刚插入的60条记录,发现可能之查询到一部分数据,但再过一会再进行查询就能够得到60条正确结果。这中情况会经常出现。很容易复现出来。----对应这种现象感觉是hbase哪里没有及时刷新导致的,哪位能解释一下原因吗,是否能够避免。这个需要了解hbase的Flush机制。hbase并不是执行一条就插入一条。而是MemStore达到某个值之后,一起执行。所以可能会产生插入后,需要等待一定的时间才能看到。
更多参考
HBase Flush操作流程以及对读写服务的影响
http://www.aboutyun.com/forum.php?mod=viewthread&tid=15191
感谢nextuser的回复,对应hbase插入数据先写入到memstore的过程,hbase难道读取的时候难道不检查内存中命中的数据吗之查询hdfs的?看了你发的链接,看的不是特别明白,里面提到跟新数据时候加上了updatesLock的写锁,是不是此时,读取时候由于updatesLock的原因导致的数据读取的不是最新的啊?
原文中:
HRegion执行Flush操作,实际上是把MemStore的内容全部刷入hdfs的过程。虽然,目前更新操作已经通过加写锁阻塞,可是读操作仍然可以继续,因此,在memstore执行snapshot的过程中,通过reference,snapshot会指向kvset,然后给kvset指向一个全新的内存区域。代码如下:
http://www.aboutyun.com/data/attachment/forum/201510/11/182613onx5s7nmxvmvseem.png
不错学习
页:
[1]