hbase数据库scan操作_HBase的Scan

news/2025/5/28 6:45:16

HBase的Scan和Get不同,前者获取数据是串行,后者则是并行;是不是有种大跌眼镜的感觉?

Scan有四种模式:scan,(Table)snapScan,(Table)scanMR,snapshotscanMR;前面两个是串行玩;后面两个是放置到MapReduce中玩;其中性能最好的就是SnapshotScanMR;

首先解释一下什么是snapshort,snapshot是HBase数据表元数据的一个快照,是的,不包括数据;有一点概念要建立清楚,HBase的数据的存储并不是HBase管理,而是HDFS;其实关系型数据库的存储也是OSFS管理的。HBase的设计就是一旦数据写入了,就不改变了,改变操作(update,delete)并不是修改HFile,而是填充墓碑文件而已;所以快照尤其价值,比如可以快速拷贝一个HBase表(只是拷贝表结构,重用原始表的HDFS数据)。

刚才讲的snapshot在scan里面也有应用场景,就是snapshotscan以及snapshortscanMR;注意MR的scan模式就不再是最上面提到的串行查询,而是并行查询;底层机制是Map-reduce;所以就下来而言,MR是要高的;毕竟是多个region查询。

接着,就是ScanAPI的设计:

1. 业务调用HBase Client,HBaseClient首先是查找缓存是否还有数据,如果有则返回数据;

2. 如果没有数据,则通过向RegionServer继续请求下面的100条记录;

3. 作为服务器端接收到next请求之后,将会通过查询BlockCache→HFile→Memstore流程来一行一行的返回数据。

这种API的调用模式(每次返回100条)目的是避免网络资源以及HBase Client端内存资源发生压力;所以可以看到,scanAPI其实只是适合于少量数据的处理;

那么对于海量数据的查询怎么处理呢?就是上面提到的MR;MR整体分为两种:TableScanMR(对应的处理类:TableMapReduceUtil.initTableMapperJob)以及SnapshotScanMR(对应处理类:TableMapReduceUtil.initSnapshotMapperJob),下面两张图表示了在架构上面的差异:

可以看到,模式很类似,都是在client中通过多线程模式进行并行处理;但是snapshotscanMR不再和region server交互,而是直接在客户端和HDFS交互;这样设计的好处即使减轻了Region Server的压力;但是需要事先和Region Server交互,获取snapshot的信息,即HBase的元数据信息(表结构以及hdfs存储信息),这样,就可以跳过region server直接和hdfs地址交互;但是snapshot有一个缺点:实时性不够;可能最近的一些数据的修改没有在snapshot中体现出来。可能会读到一些脏数据(删除更新数据仍然存在,只不过在墓碑记录而已,当然如果merge过后就没了),可能读不到一些最新数据。

参考:

文章来源:https://blog.csdn.net/weixin_39663258/article/details/111552807
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://dhexx.cn/news/show-3520299.html

相关文章

linux内核支持5g,Linux Kernel 5.2大幅改善罗技无线设备的支持

即将到来的Linux Kernel 5.2内核系列引入了大量酷炫功能和性能改进,其中最值得关注的就是改进了对罗技(Logitech)无线设备的支持。Linux开发者Hans de Goede在他的最新博文中透露了即将引入Linux 5.2内核分支的新功能,对于那些使用罗技无线鼠标和键盘的用…

单例模式的七种写法(转载)

博客分类: 设计模式多线程JVMServletIBMIDEA 转载请注明出处:http://cantellow.iteye.com/blog/838473 第一种(懒汉,线程不安全): Java代码 public class Singleton { private static Singleton inst…

数学建模优化模型简单例题_数学建模案例分析--最优化方法建模7习题六 -

习题六1、某工厂生产四种不同型号的产品,而每件产品的生产要经过三个车间进行加工,根据该厂现有的设备和劳动力等生产条件,可以确定各车间每日的生产能力(折合成有效工时来表示)。现将各车间每日可利用的有效工时数,每个产品在各车…

查看linux监听90000端口的程序,Linux下查看相应端口的进程

python学习之day5,装饰器,生成器,迭代器,json,pickle1.装饰器 import os import time def auth(type): def timeer(func): def inner(*args,**kwargs): start tim ...jqGrid 学习笔记--数据异步加载方法(转)var common…

【jar】JDK将单个的java文件打包为jar包,并引用到项目中使用【MD5加密】

后文心得附录:【实际操作使用过程中的使用心得】 1.对于封装的jar中非提供给外界使用的方法,尽量将其设置为private 2.对于工具类中经常要使用的方法,可以设定为static,这样在使用过程中不用new一个对象再去引用,可以直…

stm32 机械周期_STM32的指令周期

在keil中编程时,写了一行代码,然后就想知道,执行这句C代码需要多长时间。时钟周期在这就不解释了,频率的倒数。指令周期,个人理解就是cpu执行一条汇编指令所需要的时间。我们知道cm3使用的三级流水线,那么到…

linux终端运行electron软件,linux下运行和打包electron项目遇到的错误处理(打包使用electron-builder)...

记录一下javascript因为windows下没法成功使用electron-builder打出linux包https://blog.csdn.net/weixin_42050406/article/details/106722691vue因而在linux下搞一搞java首先是运行的时候peError: Cannot read property on of undefinedat startElectron (/root/virt-access/…

CSS 如何让超链接访问后和访问前的颜色不同且访问后仍保留hover和active效果

方法: a:link{color:#03c;} a:visited{color:#666;} a:hover{color:#f30;} a:active{color:#c30;}按L-V-H-A的顺序设置超链接样式即可,可速记为LoVe(喜欢)HAte(讨厌) 转载于:https://www.cnblogs.com/wcnwc…

python api接口 安全_最安全的api接口认证

最安全的api接口认证实现步骤:1、客户端与服务器都存放着用于验证的Token字段,客户端在本地把自己的 用户名时间戳Token 组合进行MD5加密后生成一段新的md5-token。2、客户端访问的时候携带:用户名、时间戳、md5-token。3、服务端收到请求后&…

lua_path环境变量设置linux,Linux下lua开发环境安装及安装luafilesystem

文章目录[隐藏]1. 先安装 lua 的相关依赖2. 安装 lua5.1.53、安装 luarocks4、安装 luafilesystem5、测试1. 先安装 lua 的相关依赖安装 C 开发环境由于 gcc 包需要依赖 binutils 和 cpp 包,另外 make 包也是在编译中常用的,所以一共需要 9 个包来完成安…