hbase的資料檔案都儲存在hdfs上,格式主要有兩種:
- hfile:hbase中keyvalue資料的儲存格式,hfile是hadoop的二進位制檔案,實際上storefile就是對hfile做了輕量級的包裝,即storefile底層就是hfile
- hlog file:hbase中wal(write ahead log)的儲存格式,物理上是hadoop的sequence file帶專案符號的內容
 - hregionserver管理一些列hregion物件
- 每個hregion對應table中乙個region,hegion由多個hstore組成
- 每個hstore對應table中乙個column family儲存
- column family就是乙個集中的儲存單元,故將具有相同io的column放在乙個column family會更高效
-client寫入:存入memstore,一直到memstore滿了->flush成乙個storefile,直至增長到一定閾值->發出compact合併操作->多個storefile合併成乙個storefile,同時進行版本合併和資料刪除->當storefiles compact後,逐步形成越來越大的storefile->單個storefile大小超過一定閾值之後,觸發split操作,會把當前region split成2個region,region會下線,新split出的2個孩子region會被hmaster分配到響應的hregionserver上,使得原先1個region的壓力得以分流到2個region上。
- hbase只是增加資料,所有的更新和刪除操作,都是在compact階段做的,所以,使用者寫操作只需要進入記憶體即可立即返回,從而保證io高效能
- storefile以hfile格式儲存在hdfs上
- data block段儲存表中的資料,這部分可以被壓縮
- meta block段(可選)儲存使用者自定義的kv對,可以被壓縮
- file info段–hfile的元資訊,不壓縮,使用者可以在這一部分新增自己的元資訊
- data block index段 -data block的索引。每條索引的key是被索引的block的第一條記錄的key
- meta block index段(可選)-meta block的索引
- trailer -這一段是定長的,儲存的是每一段的偏移量
壓縮
- hfile裡面的每個keyvalue對就是乙個簡單的byte陣列
- keylength和valuelength:兩個固定的長度,分別代表key和value的長度
- key部分:row length是固定長度的數值,表示rowkey的長度,row就是rowkey
- column family length是固定長度的數值,表示family的長度,接著就是column family,再接著是qualifier,然後是兩個固定長度的數值,表示timestamp和key type(put/delete)
- value部分沒有那麼複雜的結構,就是純粹的二進位制資料
HBASE 資料儲存實踐
hbase 來自hadoop database 是乙個很好的bigtable的實現,能夠儲存上百億行和百萬列的資料,是乙個高可靠性 高效能 面向列 可伸縮的分布式儲存系統。hbase的基本架構組成如下 hbase使用zookeeper作為協調服務,每個時刻只有乙個hmaster在執行,hmaster...
Hadoop資料儲存 Hbase
大家都知道hadoop是乙個資料庫,其實說的的就是hbase。它和我們平常理解的關係型資料庫有什麼區別呢?1.它是nosql的,它沒有sql的介面,有自己的一套api。通過以上描述,我們分析一下hbase的特點 1 儲存海量資料 pb 2 高吞吐 每秒每個節點上千次寫 3 適合處理稀疏資料 半結構化...
大資料儲存HBase
這兩天要寫乙個方案,某單位想建乙個中心資料庫,匯聚各業務系統資料,以及各種網上抓取的預報資料。我設想是用hbase。主要考慮點是 1 開源 2 支援海量資料 該單位的資料量增長按規劃還是很大的,大約每天20gb 關係型資料庫就不考慮了。rdbms本質上是單機系統,拿mysql來說吧,主從複製,讀寫分...