一 首先我们看一下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相关推荐

  1. JAVA_基础部分_综合篇

    JVM (1) 基本概念: JVM是可运行Java代码的假想计算机 ,包括一套字节码指令集.一组寄存器.一个栈.一个垃圾回收,堆 和 一个存储方法域.JVM 是运行在操作系统之上的,它与硬件没有直接的 ...

  2. hbase源码系列(十二)Get、Scan在服务端是如何处理?

    继上一篇讲了Put和Delete之后,这一篇我们讲Get和Scan, 因为我发现这两个操作几乎是一样的过程,就像之前的Put和Delete一样,上一篇我本来只打算写Put的,结果发现Delete也可以 ...

  3. 关于hbase的read操作的深入研究 region到storefile过程

    关于hbase的read操作的深入研究 region到storefile过程 这里面说的read既包括get,也包括scan,实际底层来看这两个操作也是一样的. 我们将要讨论的是,当我们从一张表读取数 ...

  4. HBase之BloomFilter

    HBase的Get/Scan操作流程   hbase中有BloomFilter的功能,可以在有些情况下过滤掉不需要的hfile,节省IO. BloomFilter作用 BloomFilter在HBas ...

  5. HBase中Bloomfilter类型的设置及使用的理解

    1.Bloomfilter的原理?   可参考  http://hi.baidu.com/yizhizaitaobi/blog/item/cc1290a0a0cd69974610646f.html 2 ...

  6. HBase读链路分析

    简介:HBase的存储引擎是基于LSM-Like树实现的,更新操作不会直接去更新数据,而是使用各种type字段(put,delete)来标记一个新的多版本数据,采用定期compaction的形式来归档 ...

  7. HBase数据读取流程解析

    一  客户端GET读 客户端GET读其实没有什么逻辑,就简单几个步骤: 1.1 connection 根据表名,行健得到从哪一个RegionServer和Region上去读 1.2 通过Region信 ...

  8. HBase Flush 解析

    在对hbase操作中,数据读取/写入都是发生在某个HRegion下某个Store里的files.那么究竟在写入hbase时,一个region下到底发生了什么呢? 常见的有以下三种情况: 1).mems ...

  9. HBase应该知道的

    1 摘要 本文是一篇HBase学习综述,将会介绍HBase的特点.对比其他数据存储技术.架构.存储.数据结构.使用.过滤器等. 关于Phoenix on HBase,即Sql化的HBase服务,可以参 ...

最新文章

  1. 【camera】5.相机内嵌图像处理(ISP)介绍
  2. 《极乐空间》特效制作与渲染
  3. 语音识别技术迎风发展,未来五年规模将近300亿
  4. 由一棵二叉树的先序序列和中序序列可唯一确定这棵二叉树
  5. docker image镜像的发布
  6. ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车前后左右综合实验
  7. django设置paypal支付如何获取signature
  8. 上传本地项目到gitee_用git上传本地文件到码云gitee的方法
  9. linux下collada-dom编译,Building Collada
  10. 浅谈软件架构师的工作
  11. gdb 调试带参数的程序-转
  12. logitech鼠标接收器配对
  13. 为什么你的问题总是得不到博主回复?一文教你如何高效和博主进行沟通!
  14. UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xff in position 0: illegal multibyte sequence
  15. 如何在SQL SERVER的windows身份验证添加一个SQL Server身份验证方式
  16. matlab求两向量夹角_12分高考答题必刷题型,“空间向量分析点到线的距离问题”...
  17. 什么是单片机中的掉电复位(BOR)?如何防止错误掉电
  18. Vue视频流播放器 Vue-Core-Video-Player
  19. 音乐社会计算机英语,计算机音乐技术应用,Computer music technology application,音标,读音,翻译,英文例句,英语词典...
  20. java无参构造赋值怎么没用_Java有参构造方法和无参构造方法详解

热门文章

  1. java读写excel文件poi_Java利用POI读写Excel文件工具类
  2. java string 练习_JAVA基础练习之String
  3. 数控铣削图案及编程_数控铣加工比普铣的优势,大多数人选择数控铣的原因
  4. 使用Spring Boot Actuator 监控程序运行状态
  5. java图片写入word中
  6. 方舟编译器的安装和编译Helloword
  7. html只读下拉框,Html.DropDownList – 禁用/只读
  8. django runserver开启服务(开启外网访问与ipv6访问)
  9. 解决python读取json格式数据后提取object不存在报错KeyError
  10. matlab计算复活节概率,复活节日期的计算方法