HBase存儲原理剖析筆記


 

慕課網《HBase 存儲原理剖析》學習總結

    說明:本文部分內容來自https://www.imooc.com/article/details/id/38969

    學習視頻:https://www.imooc.com/learn/996

    視頻案例演示源碼:https://github.com/wind-free/springboot-HBaseDemo1.git

案列演示
作者:喵手空空
鏈接:https://www.imooc.com/article/details/id/38969
來源:慕課網
本文部分內容均來自慕課網
作者:喵手空空
鏈接:https://www.imooc.com/article/details/id/38969
來源:慕課網
本文部分內容均來自慕課網
作者:喵手空空
鏈接:https://www.imooc.com/article/details/id/38969
來源:慕課網
本文部分內容均來自慕課網
作者:喵手空空
鏈接:https://www.imooc.com/article/details/id/38969
來源:慕課網

一、HBase的存儲模式

  1.行式存儲與列式存儲介紹

列簇式存儲:概念

  • 列簇(多個數據列的組合),HBase表中的每個列都歸屬於某個列簇
  • 列簇是表的schame的一部分,但是列並不是
  • 創建表時,需要給出列簇的名稱,不需要給出列的名稱
  • 列名都是以列簇作為前綴
  • 訪問控制磁盤和內存的使用統計都是在列簇層面進行
  • HBase准確的說是列簇數據庫,而不是列數據庫
  • 列簇數據庫將列組織為列簇,每列都必須是某個列簇的一部分
  • 訪問數據的單元也是列

作者:喵手空空
鏈接:https://www.imooc.com/article/details/id/38969
來源:慕課網

  2.行式存儲與列式存儲各自的特點

  (1)行式存儲

    維護大量的索引;

    存儲成本高

    不能夠做到線性擴展

    隨機讀取效率非常高

    對事務的支持非常好

  (2)列式存儲

      根據同一列數據的相似性原理,利於對數據進行壓縮

      存儲成本低

      由於每列數據分開存儲,可以並行查找多列的數據

  3.行式存儲與列式存儲場景

  (1)行式存儲

    表與表之間有關聯關系,數據量不大(小於千萬量級)

    強事務關聯的特性

  (2)列式存儲

       對於單列或者相對比較少的列獲取頻率較高

      針對多列查詢,使用並行處理的查詢

      利於數據壓縮和線性擴展的存儲

      事務使用率不高,讀取的場景頻率不高,同時數據量非常大

      隨機更新某一行的頻率不高

  4.HBase的列族式存儲

  (1)列族式存儲概念

     列簇(多個數據列的組合),HBase表中的每個列都歸屬於某個列簇

     列簇是表的schame的一部分,但是列並不是

      創建表時,需要給出列簇的名稱,不需要給出列的名稱

      列名都是以列簇作為前綴

      訪問控制磁盤和內存的使用統計都是在列簇層面進行

      HBase准確的說是列簇數據庫,而不是列數據庫

      列簇數據庫將列組織為列簇,每列都必須是某個列簇的一部分

      訪問數據的單元也是列

 

     HBase表的組成

    

      RowKey HBase中用RowKey去標識唯一的一行數據,一行數據中包含多個列簇

      Family:多個列簇。每一列簇包含多個列

      Column:列標識符。每一列數據包含了版本和值

      Timestamp:版本。可以理解為時間戳,也可以理解為一個數據的版本

      Value:數據值。數據本身的值

 

 

    數據存儲模式

     

      其實就是HBase表反過來看的樣子

      更抽象一點,其實HBase表數據就是Key-Value結構的

HBase表的組成

  • Table = RowKey + Family + Column + Timestamp + Value
  • RowKey :HBase中用RowKey去標識唯一的一行數據,一行數據中包含多個列簇
  • Family:多個列簇。每一列簇包含多個列
  • Column:列標識符。每一列數據包含了版本和值
  • Timestamp:版本。可以理解為時間戳,也可以理解為一個數據的版本
  • Value:數據值。數據本身的值

作者:喵手空空
鏈接:https://www.imooc.com/article/details/id/38969
來源:慕課網

       圖解

     

HBase表的組成

  • Table = RowKey + Family + Column + Timestamp + Value
  • RowKey :HBase中用RowKey去標識唯一的一行數據,一行數據中包含多個列簇
  • Family:多個列簇。每一列簇包含多個列
  • Column:列標識符。每一列數據包含了版本和值
  • Timestamp:版本。可以理解為時間戳,也可以理解為一個數據的版本
  • Value:數據值。數據本身的值

作者:喵手空空
鏈接:https://www.imooc.com/article/details/id/38969
來源:慕課網

 

  (2)列數據屬性

  (3)數據存儲原型

  (4)存儲示例

 

二、HBase數據表解析

  1.HBase建表語句解析

   關鍵字說明

     

   壓縮算法

    

  2.HBase數據存儲目錄解析

    在hbase-site.xml文件中配置或查看存儲目錄的節點

      <property>

        <name>hbase.rootdir</name>

        <value>/home/hbase_data</value>

       </property>

    進入到HBase系統目錄

    • temp

      當對表做創建或刪除操作時,將表移動到tmp目錄下,然后再進行處理

      臨時交換的表,臨時存儲一些當前需要修改的數據結構

    • WALs

      預寫日志,被HLog實例管理的WAL文件

      可以理解為存儲HBase的日志,HBase分布式數據庫系統的操作日志

    • archive

      存儲表的歸檔和快照

      HBase在做分割或合並操作完成后,會將Hfile文件移動到該目錄中,然后將之前的Hfile刪除掉

      是由Master上的定時任務定期去處理,這個目錄的作用可以簡單理解為去管理HBase的數據

    • corrupt

       用於存放損壞的日志文件,一般是空的

    • data

      HBase存儲數據的核心目錄

      系統表和用戶表數據都存儲在這里

    • hbase.id

      HBase啟動運行后,是集群中的唯一ID,用來標識HBase進程用的

    • hbase.version

      表明了集群的文件格式版本信息

      其實就是表明了Hfile的版本信息

    • oldWALs

      備份WALs中的日志文件

     data目錄解析

 

  3.HBase元信息表

  

三、HBase存儲設計

  1.HBase中的LSM存儲思想

    (1)LSM樹概念

      LSM日志結構合並樹,有兩個或兩個以上存儲數據的結構組成的,每一個數據結構各自對應自己的存儲介質

    (2)LSM樹的簡易模型

     

    (3)LSM思想在HBase中的實現  

    

  2.HBase數據存儲模塊簡介

    RegionServer = Region + Store + MemStore + StoreFile + HFile + HLog

     

  3.HBase Region解析

    (1)什么是Region

      每一個Region都會存儲於確定的RegionServer上

       

    (2)Region特點

      1. HBase中分布式存儲和負載均衡的最小單元
      2. Region的數據不能低於集群中節點的數量
      3. RegionServerRegion進行拆分  
      4. 盡量讓Row key分散到不同的Region

  4.HBase HFile 解析

    Store + MemStore + StoreFile

    • Store與列簇是一對一的關系
    • MemStore是一個內存數據結構,保存修改的數據
    • StoreFile是由內存數據寫入到文件后形成的

       

    HFile 文件

    • HBase存儲數據文件的最基本的組織形式
    • 底層是Hadoop的二進制格式文件
    • 是用戶數據的實際載體,存儲Key-Value的數據
    • Scanned block section:會被讀取,主要是存儲用戶數據
    • Nonscanned block section:不會被讀取,主要包含元數據塊
    • Load-on-open sectionRegionServer啟動時加載,主要是HFile的元數據
    • TrailerHFile的基本信息,HFile元數據的一部分

 

    Data Block

    • HBase中數據的最基本的存儲單元
    • 是實際存儲用戶數據的數據結構
    • 包含很多Key-Value

    

  5.HBase WAL解析

    (1)WAL介紹(預寫日志)

      • WAL最重要的功能就是災難恢復
      • WAL解決了什么問題:HA(高可用)問題
      • 解決:遠程備份

        

     (2)HLog

      • WAL是通過HLog模塊實現的
      • HLog是什么:HLog是實現WAL的類,一個RegionServer對應一個HLog實例

     

    (3)HLogKey

        WAL使用Hadoop的序列化文件將記錄存儲為Key-Value的數據集,Key就是HLog的Key

       

    (4)HLogSyncer(日志同步刷寫類)

      

    (5)HLogRoller

      • 特點的時間去滾動日志,形成新的日志,避免單個日志文件過大    
      • 根據HLog的序列化的number對比已經持久化的HFile的序列號,刪除舊的,不需要的日志     

        

  6.HBase Compaction解析

    (1)Compaction介紹

        Compaction會從一個Region的Store中選擇一些HFile文件進行合並

    (2)Compaction作業

        隨着系統不停的刷寫,會導致存儲目錄中有過多的數據文件

    (3)Compaction分類

      • MinorCompaction:小合並    
      • MajorCompaction:大合並     

         

    (4)Compaction的觸發時機

      MemStore 內存數據寫入到硬盤上

      

四、Hbase數據存取解析

  1.HBase數據存取流程解析

    (1)數據存儲

      客戶端:HBase Client

      • 請求Zookeeper,確定 MetaTable所在RegionServer的地址    
      • 在根據RowKey找到歸屬的RegionServer    
      • HBase Client PutDelete)數據,提交到RegionServer     

       

      服務器:HBase Server

      • Region Server 去獲取行鎖,Region更新共享鎖    
      • HLogWAL    
      • 寫緩存,MemStore    
      • 將日志同步到HDFS    
      • 寫滿緩存后,啟動異步線程將數據寫入到硬盤上    
      • 可能觸發Compaction或拆分     

       

    (2)數據獲取

      客戶端:HBase Client

      • 請求Zookeeper,確定 MetaTable所在RegionServer的地址    
      • 去對應的RegionServer地址拿到對應數據     

         

      服務端:HBase Server

      • Region Server 構建RegionScanner准備進行檢索    
      • 有多少個列簇就構建多少個StoreScanner,用於對確定的列簇數據檢索     

       

 

 

  2.HBase數據存取優化

    (1)存儲優化

    (2)檢索(獲取)優化

 

  3.HBase數據存取api介紹

    (1)存儲數據api介紹

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM