HBase ?HBase是Apache Hadoop的數據庫,基于HDFS文件系統
random,realtime read/write access to Big Data
開源、分布式、可擴展、面向列
larger tables--billions of rows X millions of columns
不支持表鏈接操作
不支持事務處理
HBase存儲的數據從邏輯上來看就像一張很大的表,其數據列可以根據需要動態增加。
每個單元(cell,由行和列所確定的位置)中的數據根據時間戳可以有不同版本。
在HBase之上還可以使用MapReduce計算模型來處理大規模數據。
HBase實際是map
(row key, column family: qulifier, timestamp) --> content
查詢時,指定:表名-->行鍵-->列族:列名-->版本號
將big table分不同的region存儲,RegionSever和DataNode在一臺主機上。
HMaster為RegionServer的主節點,不存儲表的數據,負責:
1、RegionServer狀態管理;
2、RegionServer負載均衡。
尋址機制:HMaster不參與
兩張特殊的表:
-ROOT-:記錄.META的Region信息,只有一個。位置去zookeeper查(/hbase/ROOT;//對應值為一臺主機)
.META.:記錄用戶表的Region信息,多個
查詢時,會將路徑緩存。
海量數據的秒級簡單查詢
每個列族一個文件
按行鍵拆分成一個個的region
region存儲在region server中
可以啟動多個HMaster,通過ZooKeeper的Master Election機制保證總有一個Master運行
ZooKeeper存儲Region的尋址入口,監控Region Server的狀態,存儲Hbase的schema
表名+開始/結束行鍵來標記每一個Region
每一個Region保存一個表里面某段連續的數據,從開始主鍵到結束主鍵
數據的存儲:
HRegionServer包括兩大部分:HLOG部分和HRegion部分。
HLOG用于存儲日志,采用先寫日志的方式(Write-ahead log)。
HRegion部分包含很多Region,存儲實際數據。
每一個Region由很多Store組成,每個Store存儲的是一個列族(ColumnFamily)的數據。
每一個Store包含一塊駐留內存的MemStore和多個StoreFile。
數據首先更新到MemStore中,達到域值之后再更新到對應的StoreFile中。
StoreFile是HBase的最小單元,負責實際數據的存儲。
HBase把同一列族里面的數據存儲在同一個目錄下
HBase不涉及數據的直接刪除和更新操作,所有數據通過追加方式進行更新。
數據的刪除和更新在HBase合并(compact)的時候進行。
當Store中StoreFile的數量超過設定域值時將觸發合并操作,將多個StoreFile文件合并成一個StoreFIle。
數據的更新:
更新數據時,數據被分配到對應的HRegionServer,首先進行HLOG日志登記。
在操作寫入HLOG之后,commit()調用才會將其返回給客戶端。
HLOG用于故障恢復,若一臺HRegionServer發生故障,其所維護的Regions將被重新分配到新的機器上。
這是HLOG會安裝Region進行劃分,新的機器在加載Region時通過HLOG對數據進行恢復。
Region的分裂:
當Region超過域值時,HRegionServer調用HRegion.closeAndSplit()將其拆分成兩個,
并且報告給HMaster,讓其決定由哪臺HRegionServer來存放新的Region。
這個拆分過程十分迅速,兩個新的HRegionServer最初只保留原來HRegionFile文件的引用。
這是舊的HRegionServer處于停止服務的狀態,當新的HRegion拆分完成并且把引用刪除后,舊的HRegion才會刪除
Region的合并:
兩個Region可以通過調用HRegionServer.closeAndMerger()合并成一個新的Region。
當前版本下,執行此操作需要兩臺HRegionServer停機。
HMaster:
1、管理用戶對Table的增刪改查操作;
2、管理HRegionServer的負載均衡;
3、在HRegion分裂后,負責新HRegion的分配;
4、在HRegionServer停機后,負責HRegions的遷移。
ROOT表和META表:
一個HRegion的鍵:表名+開始主鍵+唯一ID(tablename+startkey+regionId),通過這個標識區分不同的Region。
此為元數據,META。
元數據本身也被存放在HRegion里,稱包含元數據的表為META Table,里面存儲的是Region標識符和服務器的映射
META Table的Regions存儲在ROOT Table中。
元數據表和根數據表的每一行都包含一個列族(info列族):
info:regioninfo //HRegion標識符
info:server //服務器地址
info:startcode //在HRegion服務器啟動時傳給主服務器,讓主服務器確定這個HRegion服務器的信息沒有更改
HBase啟動時,HMaster先掃描根數據表,因為這個表只有一個Region,所以這個Region的名字是被寫死的。
有時需要把根數據表分配到一個HRegionServer中。
當根數據表被分配好后,HMaster掃描根數據表,獲得元數據表的名字和位置,然后把元數據表分配到不同的HRegionServer中。
最后掃描元數據表,獲得所有Region區域的信息,把它們分配給不同的HRegion服務器。
客戶端緩存已知的ROOT表和META表,從而提高訪問效率。
ZooKeeper的作用:
1、存儲ROOT表和META表的位置;
2、監控集群狀態;
3、保證在同一時刻只有一個HMaster。
HBase特點:
1、數據類型只有簡單的字符串類型
2、數據操作只有很簡單的插入、查詢、刪除、清空等操作,沒有復雜的表與表之間的關系
3、基于列存儲,每個列族由幾個文件保存,不同列族文件是分離的
4、數據維護保存多個版本
5、可伸縮性