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/對象

相關文章
相關標籤/搜索