HBase~读写操做的过程

读和写是Hbase的两种常见的基本操做,这两种操做都会涉及到Hfile和Meta表,咱们依次看看。缓存

Hfile

HFile是Hbase在HDFS中存储数据的格式,它有以下特性:服务器

  • 主标识是一个行健
  • key按照有序的方式进行存储
  • HFile仅仅分配给一个Region
  • 行存储在Hfile上面,经过排好序的KeyValue存储在磁盘上
  • 当MemStore超过它的限制的时候,会新产生一个HFile
  • 在搜索数据的时候,不须要加载整个Hfile,可使用Hfile的多层索引
  • HDFS复制WAL和Hfile块,而且这是自动的
  • 在每一个Hfile中,最高的序列号被存储为meta Field

Meta表

在读数据的时候,Hbase须要知道要访问那个Region Server,所以在读数据的时候须要经过Meta表。3d

  • Meta表也是一张Hbase的表,可是内部是一系列Region的信息
  • 它的结构以下:
  1. Key:Region起始的key,Region Id
  2. Value: RegionServer信息

读写流程

  1. 客户端首先会根据配置文件中zookeeper地址链接zookeeper,并读取/ /meta-region-server节点信息,该节点信息存储HBase元数据(hbase:meta)表所在的RegionServer地址以及访问端口等信息。用户能够经过zookeeper命令(get / /meta-region-server)查看该节点信息。
  2. 根据hbase:meta所在RegionServer的访问信息,客户端会将该元数据表加载到本地并进行缓存。而后在表中肯定待检索rowkey所在的RegionServer信息。
  3. 根据数据所在RegionServer的访问信息,客户端会向该RegionServer发送真正的数据读取请求。服务器端接收到该请求以后须要进行复杂的处理,具体的处理流程将会是这个专题的重点。
    读写流程图

scanner体系

RegionServer接收到客户端的get/scan请求以后,构建scanner体系(实际上就是作一些scan前的准备工做),在此体系基础上一行一行检索。code

scanner体系的核心在于三层scanner:RegionScanner、StoreScanner以及StoreFileScanner。三者是层级的关系,以下:
  • 一个RegionScanner由多个StoreScanner构成,一张表由多个列族组成,就有多少个StoreScanner负责该列族的数据扫描。
  • 一个StoreScanner又是由多个StoreFileScanner组成。每一个Store的数据由内存中的MemStore和磁盘上的StoreFile文件组成,相对应的,StoreScanner对象会雇佣一个MemStoreScanner和N个StoreFileScanner来进行实际的数据读取,每一个StoreFile文件对应一个StoreFileScanner,注意:StoreFileScanner和MemstoreScanner是整个scan的最终执行者。
    scanner体系

HBase中KeyValue是什么样的结构?

HBase中KeyValue并非简单的KV数据对,而是一个具备复杂元素的结构体,其中Key由RowKey,ColumnFamily,Qualifier ,TimeStamp,KeyType等多部分组成,Value是一个简单的二进制数据。Key中元素KeyType表示该KeyValue的类型,取值分别为Put/Delete/Delete Column/Delete Family等。KeyValue能够表示为以下图所示:
结构server

参考:http://hbasefly.com/2016/12/21/hbase-getorscan/对象

相关文章
相关标签/搜索