Hbase翻页数据返回异常问题的原因和解决办法

Hbase翻页数据返回异常问题的原因和解决办法,第1张

Hbase翻页数据返回异常问题的原因和解决办法

现象
        hbase翻页时偶尔返回19条,偶尔返回20条,数据返回不确定
原理
hbase的实现翻页功能中有 3 个因素在共同作用:

pagefilter(翻页过滤器),offset(数据补偿),caching(单次读取条数)

hbase对于他们的查找顺序是 pagefilter > offset > caching
举个例子,假设参数为:

pagefilter(20);
offset(1);
caching(20);

请求在一个 region 内满足查询条件的数据大于 20 条时:

    pagefilter 过滤返回 20 条offset 为 1 过滤一条剩 19 条caching 未达到 20 条,进一步请求由于 pagefilter 已经返回了 20 条,进一步请求拿不到数据,最终返回 19 条

当请求在一个 region 内满足 filter 条件的小于 20 条时,比如:15 条:

    pagefilter 过滤返回 15 条offset 为 1 过滤一条剩 14条caching 未达到 20 条,进一步请求pagefilter 应用于下一个 region,这次又返回 20 条offset 不再作用,caching 只拿前 6 条,凑成 20 条,返回

解决办法
弃用pagefilter,采用caching+startrow的方式去实现分页(记得设置好结束语句[scannerresult.close],否则scanner会一直去取,会造成数据库崩溃)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5718663.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存