好程式設計師大資料學習路線Hbase總結

好程式設計師IT發表於2019-08-13

好程式設計師大資料學習路線Hbase 總結 為什麼有 hbase

  隨著資料的逐漸增大,傳統的關係型資料庫無法滿足 對資料的查詢和儲存,而 hive 不是資料庫,只是資料倉儲,雖然能夠滿足簡單的儲存要求,但是 始終無法滿足對非結構化和半結構化的資料的儲存和查詢

 

2hbase 是什麼

  Hbase 是阿帕奇旗下的一款開源的,多版本的,可擴充套件的非關係型資料庫。

   他是基於谷歌的 bigtable 的基礎上,建立在 hdfs 上的一款提供高  可靠性的,高效能的列式儲存,可伸縮,實時讀寫的nosql的資料庫系統

 

3 適用場景

      海量資料儲存

      隨機實時讀寫和管理資料

 

4 特點

       列式儲存

       模式:無模式(不需要 use gp1808, 就可以直接建立表了 , 所以導致 hbase 中的表是不可以重名的)

       資料型別:單一的 byte[]

       多版本( version ):每個值都可以有多個版本

       稀疏儲存:如果 kv null ,則不佔用儲存空間

 

5 結構框架

 

Client

  hbase 的客戶端,包含訪問的 hbase 的介面( linux shell ,java api

      維護一些 cache( 快取 ) 來加速 hbase 的速度,比如 region 的位置資訊

 

Zookeeper:


        監控 hmaster 的狀態,保證有且只有一個 active hmaster ,達到高可用

        儲存所有的 region的定址入口,

        實時監控 hregionserver 的狀態,將 regionserrver 的上下線資訊實時通知給 hmaster

        儲存 hbase 的所有表的資訊 hbase 的後設資料)

 

Hmster(hbase 的老大 )

      regionserver 分配 region(新建表)

      負責 regionserver 負載均衡

      負責 region 的重新分配(處理 hregionserver 異常, hregion 裂變)

     Hdfs 上的垃圾檔案回收

      處理 schema 的更新請求

 

Hregionserver hbase 的小弟)   

      維護老大給他的 region( 管理本機上的 region)

      處理 client region IO 請求,並和 hdfs 互動

     Regionserver 負責切分在執行過程中變大的 region

 

Hregion:

     Hbase 中分散式的儲存和負載的最小單元,表或者是表的一部分

  ( HBase 中資料按主鍵排序,同時表按主鍵劃分為多個 Region

Region 按大小分割的,隨著資料增多, Region 不斷增大,當增大到一個閥值的 Region 就會分成兩個新的 Region

   Region 雖然是分散式儲存的最小單元,但並不是儲存的最小單元。每個 Region 包含著多個 Store 物件。每個 Store 包含一個 MemStore 或若干 StoreFile StoreFile 包含一個或多個 HFile MemStore 存放在記憶體中, StoreFile 儲存在 HDFS 上。

Hlog

      hbase 的操作進行記錄,使用 wal Write-Ahead-Log )寫資料,優先寫入 log, 然後再寫入 memstore, 以防資料丟失時可以進行日誌回滾回複資料

Store

       相當於一個列簇。

 

Memstore:128M

        記憶體緩衝區,用於將資料批次重新整理到 hdfs

 

Hstorefile(hfile)

       Hbase 中的資料是以 hfile 的形式儲存到 hdfs

     


寫流程:

1client 透過 zookeeper 的排程,向 regionserver 發出寫資料請求,在 region 中寫資料

2 資料被寫入 region memstore ,直達 memstore 達到預設的閾值( 128M

3memstore 中的資料被 flush 成一個 storefile

4 隨著 storefile 檔案的不斷增多,當其數量增長到一定閾值的時候,觸發了 compact 合併操作,將多個 storefile 合併成一個 storefile, 同時進行版本合併和資料刪除

5storefiles 透過不斷的 compact 合併操作,逐漸形成越來越大的 storefile

6 單個 storefile 大小超過一定閾值之後,觸發 spilt 操作,把當前的 region 切分成 2 個新的 region ,父 region 會下線,新切出的 2 個字 region 會被 hmaster 分配到相應的 regionserver 上,使得原先的一個 region 的壓力的以分配到 2 region

 

讀流程:

1client 訪問 zookeeper ,查詢 root 表,獲取 meta 表的資訊

2 meta 表中查詢,獲取存放的目標的 region 資訊,從而找到對應的 regionserver

3 透過 regionserver 獲取需要查詢的資料

4regionserver 的記憶體分為 memstore blockcache 兩部分, memstore 主要用於寫資料, blockcache 主要用於讀資料,請求先到 memstore 中查資料,查不到就在 blockcache 在查,再查不到就會到 storefile 上讀,並把讀的結果放入 blockcache

 

定址過程: client-->Zookeeper-->-ROOT- -->.META. -->RegionServer-->Region-->client


Rowkey :行鍵,和 mysql 的主鍵一樣,不允許重複,按照字典順序排列

Columnfamily :列簇

Column :列

Timestamp: 時間戳,預設顯示最新的時間戳

Version :版本號,記錄資料的版本

Cell: 單元格,一個 key  一個 value


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2653561/,如需轉載,請註明出處,否則將追究法律責任。

相關文章