1.HBASE基礎架構,
1.1 參考:
HBase集群架構與讀寫優化:理解核心機制與性能提升-CSDN博客
1.2問題:
1.FLUSH對hbase的影響
2. HLog和memstore的區別
? ? ?hlog中存儲的是操作記錄,比如寫、刪除。而memstor中存儲的是寫入的表數據?
2.HBASE與HDFS的關系
HBASE的主和從分別稱為HMaster和RegionServer。其數據結構和表(表中又分為行和列)。支持實時讀寫。(如何實現的??)
HDFS的主和從分別稱為NameNode和DataNode。其數據結構為hfile文件,無表的概念。不支持實時讀寫,用于批處理和高吞吐量的讀寫
- HDFS 是 Hadoop 的分布式存儲系統,提供高吞吐量的數據訪問。
- 特點:
- 數據以文件塊(block)的形式分布在多個 DataNode 上。
- 支持數據冗余和容錯,默認情況下每個文件塊有 3 個副本(所以是HDFS機制實現了數據備份)。
- 主從架構:NameNode 負責元數據管理,DataNode 負責實際的數據存儲。
- 與 HBase 的關系:
- HBase 依賴 HDFS 存儲數據和元數據(如表的 Region 數據、WAL 日志等)。
- HDFS 提供了可靠的存儲基礎,但不支持實時隨機讀寫,這是 HBase 的補充功能。
- HBase 是一個基于 HDFS 的分布式 NoSQL 數據庫,專為海量數據的實時隨機讀寫設計。
- 特點:
- 數據按行存儲,基于鍵值對。
- 支持超大規模表(行數和列數可以達到數十億級)。
- 提供高性能的隨機讀寫操作。
- 依賴組件:
- HDFS:用于持久化存儲表數據和 WAL(Write-Ahead Log)日志。
- ZooKeeper:用于集群管理、故障恢復、元數據存儲和分布式協調。
- HBase 的補充功能:
- 提供高性能的隨機讀寫,而 HDFS 主要用于批處理和高吞吐量的讀寫。
2. NameNode 和 HMaster是否等價
NameNode 和 HMaster 不等價,它們是分布式系統中兩個獨立的組件:
- NameNode 是 HDFS 的管理節點,關注的是文件存儲。
- HMaster 是 HBase 的管理節點,關注的是表和 RegionServer 的管理
? 對比NameNode 和 HMaster
特性 | NameNode | HMaster |
---|---|---|
系統所屬 | HDFS | HBase |
作用 | 管理文件系統元數據和塊分布 | 管理 HBase 表和 RegionServer |
元數據存儲 | 存儲在內存中(文件元數據) | 部分存儲在 HDFS 和 ZooKeeper |
與數據存儲關系 | 指揮 DataNode 存儲文件塊 | 指揮 RegionServer 存儲 HBase 數據 |
高可用性 | 支持 Active/Standby NameNode | 支持 Active/Standby HMaster |
3.hdfs不支持實時讀寫,hbase如何做到可以支持實時讀寫
讀寫流程的優化
- 寫流程(先寫入內存,存儲到一定量后才寫入hfile):
- 數據寫入 WAL(順序寫 HDFS)。
- 數據寫入 MemStore(內存操作,低延遲)。
- 數據刷入 HDFS(按照rowkey順序寫 HFile,提升了使得后續的讀速度)。
- 讀流程:
- 查詢數據時,優先從 MemStore 或 BlockCache(經常讀取的數據會存儲在BlockCache中) 中讀取。
- 如果數據不在內存中,則從 HFile(HDFS)中加載。
- 查詢結果可以緩存到 BlockCache 中,加速后續訪問。
? ? ?總結原因就是:1.添加了內存作為中間緩沖區;2.數據按照rowkey順序寫入hfile
Zookeeper和Hbase的關系
1.zookeeper在HBASE 中的作用時什么?
- 記錄HBase 集群的運行狀態:
- 活躍的 HMaster 和備份 HMaster 的狀態。
- 活躍的 RegionServer 列表。
- 記錄表和 Region 的元數據的位置:
hbase:meta
表的位置(hbase:meta
是存儲表和 Region 元數據的特殊表)。- 某些分布式鎖和協調信息,例如 Region 的遷移狀態。
- 故障恢復和選主:
- 在 HMaster 故障時,ZooKeeper 會負責進行新主節點的選舉。
2.讀寫數據時,為什么要從zookeeper中獲取hbase的元數據,hbase的元數據時存儲在zookeeper中嗎?
? ?HBASE的元數據存儲的HDFS中,但是元數據在HDFS中的存儲位置卻存儲在zookeeper中,所以想訪問元數據時,首先需要訪問zookeeper。
同時,HMaster 會將表和 Region 的元數據加載到內存中以加速操作,但這些信息的持久化存儲在 HDFS 和 ZooKeeper 中。
HBASE存儲
1.hbase中列族對存儲有什么影響
每個列族可以獨立設置存儲參數(如壓縮、版本控制、TTL 等),這會影響存儲的大小和性能。
HBase 為每個列族分配獨立的塊緩存(block cache)
一個region上,同一個列族的數據存儲在一個或多個 HFile 中。但是同一個列的數據只存儲在一個文件中。同一列族的數據存儲在同一個磁盤上
hfile中每條數據的鍵(RowKey+Column Family+Column+Timestamp)和對應的值存儲在同一個文件中。
2.hbase內部是如何實現備份的,即數據被損壞后,如何復原
? ?hbase數據分為兩部分:存儲到內存中的和固化到hfile文件中的。
2.1)RegionServer崩潰,則內存中數據會丟失,但是WAL(Write-Ahead Log)文件中會存儲所有內存中的數據,所以Master將崩潰的 RegionServer 的 WAL 日志分配給其他 RegionServer,通過重放 WAL 恢復數據到內存即可。
2.2)hfile文件損壞,由于每個數據塊(Block)在 HDFS 上默認會存儲 3 個副本,所以只要有未損壞的hfile文件即可。HDFS 會自動從副本中修復損壞的文件。如果副本全部丟失,可使用快照或備份文件恢復(需人為定期備份)
2.3)如果整個集群毀壞(需要人為介入)
- 從跨集群復制的備份集群恢復。
- 從定期備份的快照或 HDFS 數據恢復。
? ??