1. 程式人生 > >Hbase知識點

Hbase知識點

  1. Hbase的特性:容量巨大、面向列、稀疏性、擴充套件性,高可靠性、高效能
  2. Hbase的優勢:高可靠性,高效能,面向列 可伸縮的分散式資料庫,利用hbase可以在廉價pc上搭建起大規模結構化資料叢集。
  3. Hbase的核心功能模組:
  4. Client:這個Hbase系統的入口,直接通過客戶端操作hbase,使用RPC協議與Hmaster(管理類操作)和RegionServer(資料寫讀類操作)進行通訊
  5. 協調服務模組ZooKeeper,負責管理Hbase中多Hmaster的選舉、伺服器之間狀態同步等,儲存所有region的定址入口,保證hbase叢集中只有一個Hmaster節點
  6. Hmaster主要的職責是什麼?答:主要負責Table和Region的管理工作,管理使用者對Table的增刪改查操作,管理regionserver的負載均衡,調整region分佈;在region分裂後,負責新region的分配;在regionserver宕機後,負責失效regionserver上的region的遷移工作
  7. hbase使用場景(最好知道幾個例子:淘寶,搜狐等等):儲存大量的資料且能保證良好的隨機訪問效能,需要很高的寫吞吐量,瞬間寫入量很大,可以動態擴充套件整個儲存系統容量,資料格式無限制,業務場景簡單
  8. 為什麼在Hbase的RegionServer上會發生 切表這一動作?答:Hbase中每張表的大小可能是TB級,甚至是pb級的;一臺物理機上是不可能儲存整張表,因此表會切分成小一點的資料單位,然後分配到多臺伺服器上
  9. Hmaster為什麼沒有單點問題?答:Hbase 中可以啟動多個Hmaster,通過Zookeeper中的Master Election機制保證總會有一個master在執行
  10. ZooKeeper在整個框架中的定位。答:一種集中服務,用來維護配置資訊、命名 服務、提供分散式同步和提供分組服務;負責管理Hbase中多Hmaster的選舉、伺服器之間狀態同步等,儲存所有region的定址入口,保證hbase叢集中只有一個Hmaster節點。
  11. 請描述Hregion的負載均衡過程。答:HBase使用RowKey將表水平切割成多個 Hregion,每個HRegion都紀錄了它的StartKey和 EndKey,Client可以通過HMaster快速的定位每個 RowKey在哪個HRegion中,HRegion由HMaster分配到相應在HRegion Split後,兩個新的HRegion 最初會和之前的父HRegion在相同的 HRegionServer上,出於負載均衡的考慮,HMaster可能會將 其中的一個甚至兩個重新分配的其他的 HRegionServer中,此時會引起有些HRegionServer處理的數 據在其他節點上 ,直到下一次Major Compaction將資料從 遠端的節點移動到本地節點。這就是Hregion的負載均衡。
  12. Hstore由哪些部分組成?各個部分主要負 責哪些工作?答:兩部分組成,一部分是MemStore,一部 分是StoreFiles;*MemStore是Sorted Memory Buffer, 記憶體裡的寫入緩衝區,使用者寫入的資料首 先會放入MemStore; 當某一個region的MemStore大小達到一 定的閥值時,hbase就會阻塞更新;當MemStore滿了以後會Flush成一個 StoreFile(底層實現是HFile)儲存到磁碟 上;*StoreFile以HFile格式儲存在HDFS上;用於儲存Hbase的資料;當StoreFile檔案數量增長到一定閾值,會 觸發Compact操作,將多個StoreFiles合 併成一個StoreFile; 壓縮過程中會進行版本合併和資料刪除; 因此可以看出HBase其實只有增加資料, 所有的更新和刪除操作都是在後續的 compact過程中進行的; • 這使得使用者的寫操作只要進入記憶體中就可 以立即返回,保證了HBase I/O的高效能。
  13. WAL是什麼?作用是什麼?答:預寫式日誌,記錄所有更新操作; • 一個region server包括Hlog日誌和存放實 際資料的Store; • 用於災難恢復
  14. 請描述RegionSever的讀寫流程。答:RegionServer的寫流程 • 當客戶端發起一個Put請求時,首先它從 hbase:meta表中查出該Put資料最終需要 去的HRegionServer。 • 然後客戶端將Put請求傳送給相應的 HRegionServer,在HRegionServer中 它首先會將該Put操作寫入WAL日誌檔案中 (Flush到磁碟 • 寫完WAL日誌檔案後,HRegionServer根 據Put中的TableName和RowKey找到對 應的HRegion,並根據Column Family找 到對應的HStore,並將Put寫入到該 HStore的MemStore中。 • 此時寫成功,並返回通知客戶端。RegionServer的讀流程 • 分析一下相同的Cell可能存在的位置 • 首先對新寫入的Cell,它會存在於 MemStore中; • 然後對之前已經Flush到HDFS中的Cell, 它會存在於某個或某些StoreFile(HFile)中; • 最後,對剛讀取過的Cell,它可能存在於 BlockCache中。 • 既然相同的Cell可能儲存在三個地方,在讀 取的時候只需要掃瞄這三個地方,然後將 結果合併即可(Merge Read), • 在HBase中掃瞄的順序依次是: BlockCache、MemStore、 StoreFile(HFile)。 • 其中StoreFile的掃瞄先會使用Bloom Filter過濾那些不可能符合條件的HFile, • 然後使用Block Index快速定位Cell,並將 其載入到BlockCache中,然後從 BlockCache中讀取。 • 一個HStore可能存在多個 StoreFile(HFile),此時需要掃瞄多個 HFile,如果HFile過多又是會引起效能問題。
  15. Compaction方式有幾種?每一種應用的場 景是什麼?答:在HBase中Compaction分為兩種:Minor Compaction和Major Compaction。 • Minor Compaction是指選取一些小的、 相鄰的StoreFile將他們合併成一個更大的 StoreFile,在這個過程中不會處理已經 Deleted或Expired的Cell。 • Major Compaction是指將所有的 StoreFile合併成一個StoreFile • 在這個過程中,標記為Deleted的Cell會被 刪除 • 而那些已經Expired的Cell會被丟棄 • 那些已經超過最多版本數的Cell會被丟棄 • 一次Major Compaction的結果是一個 HStore只有一個StoreFile存在 • Major Compaction可以手動或自動觸發 • 由於它會引起很多的IO操作而引起效能問 題 • 因而它一般會被安排在週末、凌晨等叢集 比較閒的時間。
  16. 請解釋Hbase與Hadoop是如何協同工作的。(不知道標準答案)答:HBase是一個分散式的、面向列的開源資料庫.HBase是Apache的Hadoop專案的子專案
  17. Hbase中對Join的支援是如何做到的?把另一張表的關鍵字加入表中列族,加入二級索引
  18. 請說出幾種RowKey雜湊的方法:加入隨機數,反轉倒序,取模,雜湊值
  19. 為什麼Hbase不能處理好兩個或者三個以 上的列族?答:由於Hbase的物理因素,記憶體memstore在做flash操作後會生成針對列族的Hfile檔案,當各個Hfile資料量大小差異過大時會做出“合併”操作,而此操作是在region上完成的,region又是使用者承載著資料操作,因此影響效能,所以過多的列族是Hbase不能處理的。