Hbase初識
簡介
資料模型 | 相關資料庫 | 典型應用 | 優勢 | 劣勢 |
---|---|---|---|---|
key-value | Redis | 快取 | 快速查詢 | 儲存資料缺乏結構化 |
列族 | Cassandra,Hbase | 分散式的檔案系統,大規模的資料儲存 | 易於分散式擴充套件 | 功能受限 |
document | Mongo,CouchDB | 易用 | 可擴充套件性差 | |
圖 | Neo4J | 社交網路 | 利用圖結構相關演演算法 | 不易擴充套件 |
從NoSQL分類來說,Hbase和Cassandra是一類資料庫,都是列族資料型別。
關於hbae和cassandra的對比可以看下為什麼國內流行hbase,國外反而多用cassandra?,這裡不再贅述。
名詞介紹
表,行這些都是同關係型資料庫一致
列族
列族顧名思義就是列的組合,wide-column這種資料型別都是根據BigTable模型實現的,它是一個稀疏的、多維結構對映。實際儲存,就是列族的資料儲存在一起,而不是像關係型資料庫那樣,一行存在一起。所以列族是需要提前定義的。
key-value,wide-column,json幾種資料型別對比NoSQL概述-從Mongo和Cassandra談談NoSQL
region
region就是range partition,一組row key的範圍組合。region是自動分裂的。一般大小是1GB-2GB,超過配置的大小,就進行分裂。
部署架構
Hbase的部署架構比較複雜。對於一個分散式資料庫,叢集架構一般有三個角色:路由節點、配置資訊節點、分片資料節點。 有些資料庫將這些功能都整合到同一個節點,這樣的話擴容比較簡單,單點比較少。如果拆分成不同節點話,部署起來就比較麻煩,擴容的話也比較麻煩,每個部分都有可能需要去擴容,好處是職責隔離,不會因為耦合造成整個節點的故障。以下是HBase的叢集部署架構
Hbase Master
Hbase是AP型分散式資料庫,Master-Slave模式。Master負責管理所有的RegsionServer,也就是上面所說的配置資訊節點這個角色。 記錄了資料塊HRegions屬於哪個Region Server。當RegionServer增加或者下線時,需要進行HRegion的重新分配。一般為了可用性,Master節點個數要大於1,避免單點故障。
Region Server Region Server負責資料的讀寫,資料存放在記憶體中,持續化需要和HDFS檔案系統進行I/O互動。HBase是列族資料庫,列的資料是存放在一起的,不同的行按照row key分佈,儲存在不同的Region Server中。
一般來說,擴容主要是擴容Region Server,因為主要是Region Server負責資料的讀寫。
Zookeeper 管理HMaster的資訊
HDFS DataNode
資料的儲存與備份。將資料儲存在HDFS的一個顯而易見的好處時,當叢集Region Server發生變化時,增加或者減少時,不需要在節點間進行資料的複製,這大大減少了節點的上下線時間,和I/O消耗。
分片
Hbase的分片策略很簡單,就是根據rowkey來分片,每個Region Server負責一組rowkey.
資料儲存與維護
資料儲存和Cassandra類似,先寫log和記憶體,記憶體memstore也是LSM樹,然後在flush到磁碟中,HFile,儲存在HDFS中。
當HFile超過一定大小後,進行資料的分離。
讀寫分析
讀操作
讀操作一般在Hbase裡面叫3跳,涉及到Hbase叢集的3個角色。
Meta table HRegion的metadata資訊都儲存在.META表中,Region增加減少,這個資訊都會更改。
Root table Root table是用來記錄META表資訊的,儲存在ZK中。
Hbase的讀一般需要三跳
非常繁瑣,所以路由資訊一般cache到client,減少client與Hbase各個節點之間的互動。
寫操作
沒什麼複雜的,和cassandra類似,不再贅述
總結
Hbase的叢集部署架構模式和Mongo類似,多角色方式。所以讀取資料的3跳也比較類似。單節點寫入的話和Cassandra類似。