1. 程式人生 > >HBase 數據模型及讀寫操作

HBase 數據模型及讀寫操作

稀疏 tor 標識 刪除 定位 兩個 超過 idt 表示

一、HBase數據模型
  HBase是一個類似於BigTable的分布式數據庫,它是一個稀疏的長期存儲的(存在HDFS上)、多維度的、排序的映射表。這張表的索引是行關鍵字列關鍵字時間戳。HBase的數據都是字符串,沒有類型。

例:
技術分享圖片
可以將一個表想象成一個大的映射關系,通過行鍵、行鍵+時間戳或行鍵+列(列族:列修飾符),就可以定位特定數據。由於HBase是稀疏存儲數據的,所以某些列可以是空白的。上表給出了 com.cnn.www 網站的數據存放邏輯視圖,表中僅有一行數據,行的唯一標識為“com.cnn.www”,對這行數據的每一次邏輯修改都有一個時間戳關聯對應。表中共有四列:contents:html、anchor:cnnsi.com、anchor:my.look.ca、mime:type,每一列以前綴的方式給出其所屬的列族。

行鍵(RowKey)是數據行在表中的唯一標識,並作為檢索記錄的主鍵。在HBase中訪問表中的行只有三種方式:通過某個行鍵訪問、給定行鍵的範圍訪問、全表掃描。行鍵可以是任意字符串(最大長度64KB)並按照字典序進行存儲。對於那些經常一起讀取的行,需要對鍵值精心設計,以便它們能放在一起存儲。





二、HBase讀寫流程


技術分享圖片
上圖是HRegionServer數據存儲關系圖。上文提到,HBase使用MemStore和StoreFile存儲對表的更新。數據在更新時首先寫入HLog和MemStore。MemStore中的數據是排序的,當MemStore累計到一定閾值時,就會創建一個新的MemStore,並且將老的MemStore添加到Flush隊列,由單獨的線程Flush到磁盤上,成為一個StoreFile。與此同時,系統會在Zookeeper中記錄一個CheckPoint,表示這個時刻之前的數據變更已經持久化了。當系統出現意外時,可能導致MemStore中的數據丟失,此時使用HLog來恢復CheckPoint之後的數據。

StoreFile是只讀的,一旦創建後就不可以再修改。因此Hbase的更新其實是不斷追加的操作。當一個Store中的StoreFile達到一定閾值後,就會進行一次合並操作,將對同一個key的修改合並到一起,形成一個大的StoreFile。當StoreFile的大小達到一定閾值後,又會對 StoreFile進行切分操作,等分為兩個StoreFile。

1、寫操作流程

步驟1:Client通過Zookeeper的調度,向HRegionServer發出寫數據請求,在HRegion中寫數據。
步驟2:數據被寫入HRegion的MemStore,直到MemStore達到預設閾值。
步驟3:MemStore中的數據被Flush成一個StoreFile。
步驟4:隨著StoreFile文件的不斷增多,當其數量增長到一定閾值後,觸發Compact合並操作,將多個StoreFile合並成一個StoreFile,同時進行版本合並和數據刪除。
步驟5:StoreFiles通過不斷的Compact合並操作,逐步形成越來越大的StoreFile。
步驟6:單個StoreFile大小超過一定閾值後,觸發Split操作,把當前HRegion Split成2個新的HRegion。父HRegion會下線,新Split出的2個子HRegion會被HMaster分配到相應的HRegionServer 上,使得原先1個HRegion的壓力得以分流到2個HRegion上。

2、讀操作流程

步驟1:client訪問Zookeeper,查找-ROOT-表,獲取.META.表信息。
步驟2:從.META.表查找,獲取存放目標數據的HRegion信息,從而找到對應的HRegionServer。
步驟3:通過HRegionServer獲取需要查找的數據。
步驟4:HRegionserver的內存分為MemStore和BlockCache兩部分,MemStore主要用於寫數據,BlockCache主要用於讀數據。讀請求先到MemStore中查數據,查不到就到BlockCache中查,再查不到就會到StoreFile上讀,並把讀的結果放入BlockCache。




HBase 數據模型及讀寫操作