Hbase初識
摘要
最近有用到Hbase,整理了下Hbase的架構,整體思路可以看之前的NoSQL概述 NoSQL概述-從Mongo和Cassandra談談NoSQL 。
數據模型 | 相關數據庫 | 典型應用 | 優勢 | 劣勢 |
---|---|---|---|---|
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 ServerRegion 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 tableHRegion的metadata信息都存儲在.META表中,Region增加減少,這個信息都會更改。
Root tableRoot table是用來記錄META表信息的,存儲在ZK中。
Hbase的讀一般需要三跳
非常繁瑣,所以路由信息一般cache到client,減少client與Hbase各個節點之間的交互。
寫操作
沒什麼複雜的,和cassandra類似,不再贅述
總結
Hbase的集羣部署架構模式和Mongo類似,多角色方式。所以讀取數據的3跳也比較類似。單節點寫入的話和Cassandra類似。
參考
https://www.iteblog.com/archives/2516.html