🍋🍋大數據學習🍋🍋
🔥系列專欄: 👑哲學語錄: 用力所能及,改變世界。
💖如果覺得博主的文章還不錯的話,請點贊👍+收藏??+留言📝支持一下博主哦🤞
HBase簡介
HBase是一個基于Hadoop的分布式、可擴展、支持大數據存儲的數據庫。
使用場景:需要隨機或實時讀寫大數據的場景
目標:支持數十億行和數百萬列的大表
底層技術對應關系:
分布式列存儲 | BigTable | HBase(基于Hadoop) | BigTable是Google的分布式列存儲系統,HBase是其開源實現,提供稀疏多維映射表。 |
分布式文件系統 | GFS(Google File System) | HDFS(Hadoop Distributed File System) | GFS是Google的早期分布式文件系統,HDFS是其開源版本,支持大規模數據存儲。 |
海量數據處理框架 | MapReduce | Hadoop MapReduce | MapReduce是Google提出的分布式計算模型,Hadoop MapReduce是其開源實現。 |
分布式協同服務管理 | Chubby | Zookeeper | Chubby是Google的分布式鎖服務,Zookeeper是其開源實現,用于協調分布式系統。 |
數據模型
HBase采用表來組織數據,采用命名空間(NameSpace)對表進行邏輯分組。
NameSpace: 命名空間,類似于mysql中的database,默認有default和hbase,用戶表默認在default中
表:HBase采用表來組織數據,表由行和列組成,列劃分為若干個列族。
行:每個HBase表都由若干行組成,每個行由可排序的**行鍵(row key)**來標識。
列:采用列族:列限定符的形式確定具體的一列。
列族:一個HBase表被分組成許多“**列族”(Column Family)**的集合,它是基本的訪問控制單元。列族可以動態添加,但在定義表時需要指定至少一個列族,在使用某個列族時要事先定義。
列限定符:表在水平方向由一個或者多個列族組成,一個列族中可以包含任意多個列,同一個列族里面的數據存儲在一起。列族里的數據通過**“列限定符”(Column qualifier)**來定位。
單元格:在HBase表中,通過行、列族和列限定符確定一個“單元格”(cell),單元格中存儲的數據沒有數據類型,總被視為字節數組byte[],所以在定義表時無需定義數據的類型,使用時用戶需要自行進行數據類型轉換。
時間戳:每個單元格都保存著同一份數據的多個版本,這些版本采用時間戳進行索引, HBase中執行更新操作時,并不會刪除數據舊的版本,而是生成一個新的版本,舊有的版本仍然保留(這是和HDFS只允許追加不允許修改的特性相關的)
HBase是一個稀疏、多維度、排序的映射表,這張表的索引是行鍵、列族、列限定符和時間戳,在進行數據存儲的時,其采用key-value形式:Table + RowKey(升序) + ColumnFamily + Column + Timestamp --> Value
系統架構
HBase采用主從結構設計,基礎存儲依賴于HDFS,協調服務依賴于Zookeeper集群,HMaster負責HBase的管理操作,HRegionServer負責數據的相關操作。
客戶端(Client)
客戶端包含訪問HBase的接口,同時在緩存中維護著已經訪問過的Region位置信息,用來加快后續數據訪問過程。
對于管理類操作,Client與HMaster進行RPC
對于數據讀寫操作,Client與HRegion Server進行RPC
Zookeeper服務器
Zookeeper是Chubby算法的一種開源實現
- 保證任何時候,集群中只有一個活躍的master,因為為了保證安全性會啟動多個Master
- 存儲所有Region的尋址入口
- 實時監控Region Server的狀態,將Region Server的上下線的信息匯報給HMaster。
- 存儲Hbase的元數據(Schema)包括,知道整個Hbase集群中有哪些Table,每個 Table 有哪些column family(列族)
Master服務器
主服務器主要負責表和Region的管理工作, 其實現類為 HMaste :
- 對于表的操作:create, delete, alter
- 對于 RegionServer 的操作:
- 實現不同Region服務器之間的負載均衡
- 在Region分裂或合并后,負責重新調整Region的分布
- 對發生故障失效的Region服務器上的Region進行遷移
Region服務器
Region服務器是HBase中最核心的模塊,維護Master分配給他的 Region ,其實現類為 HRegionServer ,主要組成如下:
- 一個Region服務器包含多個Region,這些Region共用一個HLog文件
- Region由一個或者多個Store組成,每個Store保存一個 Columns Family。
- 每個Strore又由一個MemStore和0至多個StoreFile組成。
- MemStore存儲在內存中,StoreFile存儲在HDFS
- StoreFile的底層實現是HFile
主要作用如下:
- 對于數據的操作:get, put, delete
- 對于 Region 的操作:splitRegion、compactRegion