摘要

最近有用到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

相關文章