HBase之KeyValueScanner
一 首先我们看一下Key Value 是怎么在HFile上存储的
其中Key Length =Key的基础大小+Row Key Length+ Column Family
Length + Qualifier Length
Key的基础大小 = 存储rowkey length的大小 + 存储column family
Length的大小 + 存储TimeStamp的大小 + 存储Key类型的大小
= 2 + 1 + 8 + 1 = 12
二 各种类型的Scanner介绍
2.1 InternalScanner 和 KeyValueScanner区别
InternalScanner:我们可以获取一个KeyValue的List,KeyValueScanner
是一个可以向外迭出KeyValue的一个scanner,只能获取一个KeyValue
RegionScanner,StoreScanner,KeyValueHeap实现了InternalScanner
StoreScanner,MemStoreScanner,StoreFileScanner实现了KeyValueSca
Nner
2.2 如何组织一组相似或者相同的Scanner
一个RegionScanner是由一组StoreScanner组成的,一个StoreScanner是由一个MemStoreScanner和多个StoreFileScanner组成的,所有的scanners通过KeyValueHeap进行merge
成员变量heap: 是一个优先级队列,用来存储child scanners
2.3 如何从一个scanner转化为其他的scanner
优先级队列:
每一次从队列里选举一个scanner,使用之后又放回去,如果peek出来的next keyvalue是null,则表示已经scan完毕。所以我们应该关掉它,不需要把它放回去。选举出哪一个由以下的Comparator来决定:
Peek: 只是查看scanner下一个KeyValue,但是并不会迭代这个
Scanner。
一个StoreFileScanner切换到另外一个StoreFileScanner是很容易的,只要一个StoreFileScanner完成,并且关闭就可以切换到另一个StoreFileScanenr。
如何从StoreFile Scanner寻找一个给定KeyVaue?
This is the flow of seeking:
Figure 10 How toseek a KeyValue
总结所有的scanner,并寻找他们的关系:
KeyValueHeap: 这个类主要用于跨store或者跨storefile的merge工作,它是RegionScannerImpl和StoreScanner的成员变量。
RegionScannerImpl: 使用KeyValueHeap进行跨store的KeyValue的合并
StoreScanner: 使用KeyValueHeap进行memstore和storefile的合并
所以,我们也可以理解为KeyValueHeap是一个parent-level的scanner,它有一个或多个child-level的scanners,在这个类的实例化期间,它会加载所有的childscanner
KeyValueScanner: 它主要用于获取下一个KeyValue,同时他还可以不用遍历的情况下查看下一个KeyValue
InternalScanner: 它主要用于获取一些KeyValue(我们可以通过参数指定获取多少key value,默认是一行的所有的KeyValue
Scanner关闭流程如下:
HBase之KeyValueScanner相关推荐
- JAVA_基础部分_综合篇
JVM (1) 基本概念: JVM是可运行Java代码的假想计算机 ,包括一套字节码指令集.一组寄存器.一个栈.一个垃圾回收,堆 和 一个存储方法域.JVM 是运行在操作系统之上的,它与硬件没有直接的 ...
- hbase源码系列(十二)Get、Scan在服务端是如何处理?
继上一篇讲了Put和Delete之后,这一篇我们讲Get和Scan, 因为我发现这两个操作几乎是一样的过程,就像之前的Put和Delete一样,上一篇我本来只打算写Put的,结果发现Delete也可以 ...
- 关于hbase的read操作的深入研究 region到storefile过程
关于hbase的read操作的深入研究 region到storefile过程 这里面说的read既包括get,也包括scan,实际底层来看这两个操作也是一样的. 我们将要讨论的是,当我们从一张表读取数 ...
- HBase之BloomFilter
HBase的Get/Scan操作流程 hbase中有BloomFilter的功能,可以在有些情况下过滤掉不需要的hfile,节省IO. BloomFilter作用 BloomFilter在HBas ...
- HBase中Bloomfilter类型的设置及使用的理解
1.Bloomfilter的原理? 可参考 http://hi.baidu.com/yizhizaitaobi/blog/item/cc1290a0a0cd69974610646f.html 2 ...
- HBase读链路分析
简介:HBase的存储引擎是基于LSM-Like树实现的,更新操作不会直接去更新数据,而是使用各种type字段(put,delete)来标记一个新的多版本数据,采用定期compaction的形式来归档 ...
- HBase数据读取流程解析
一 客户端GET读 客户端GET读其实没有什么逻辑,就简单几个步骤: 1.1 connection 根据表名,行健得到从哪一个RegionServer和Region上去读 1.2 通过Region信 ...
- HBase Flush 解析
在对hbase操作中,数据读取/写入都是发生在某个HRegion下某个Store里的files.那么究竟在写入hbase时,一个region下到底发生了什么呢? 常见的有以下三种情况: 1).mems ...
- HBase应该知道的
1 摘要 本文是一篇HBase学习综述,将会介绍HBase的特点.对比其他数据存储技术.架构.存储.数据结构.使用.过滤器等. 关于Phoenix on HBase,即Sql化的HBase服务,可以参 ...
最新文章
- 【camera】5.相机内嵌图像处理(ISP)介绍
- 《极乐空间》特效制作与渲染
- 语音识别技术迎风发展,未来五年规模将近300亿
- 由一棵二叉树的先序序列和中序序列可唯一确定这棵二叉树
- docker image镜像的发布
- ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车前后左右综合实验
- django设置paypal支付如何获取signature
- 上传本地项目到gitee_用git上传本地文件到码云gitee的方法
- linux下collada-dom编译,Building Collada
- 浅谈软件架构师的工作
- gdb 调试带参数的程序-转
- logitech鼠标接收器配对
- 为什么你的问题总是得不到博主回复?一文教你如何高效和博主进行沟通!
- UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xff in position 0: illegal multibyte sequence
- 如何在SQL SERVER的windows身份验证添加一个SQL Server身份验证方式
- matlab求两向量夹角_12分高考答题必刷题型,“空间向量分析点到线的距离问题”...
- 什么是单片机中的掉电复位(BOR)?如何防止错误掉电
- Vue视频流播放器 Vue-Core-Video-Player
- 音乐社会计算机英语,计算机音乐技术应用,Computer music technology application,音标,读音,翻译,英文例句,英语词典...
- java无参构造赋值怎么没用_Java有参构造方法和无参构造方法详解
热门文章
- java读写excel文件poi_Java利用POI读写Excel文件工具类
- java string 练习_JAVA基础练习之String
- 数控铣削图案及编程_数控铣加工比普铣的优势,大多数人选择数控铣的原因
- 使用Spring Boot Actuator 监控程序运行状态
- java图片写入word中
- 方舟编译器的安装和编译Helloword
- html只读下拉框,Html.DropDownList – 禁用/只读
- django runserver开启服务(开启外网访问与ipv6访问)
- 解决python读取json格式数据后提取object不存在报错KeyError
- matlab计算复活节概率,复活节日期的计算方法