1. 程式人生 > >HBase講解

HBase講解

1.HBase在Hadoop中的位置

HBase(Hadoop Database)是一個開源的、面向列(Column-Oriented)、適合儲存海量非結構化資料或半結構化資料的、具備高可靠性、高效能、可靈活擴充套件伸縮的、支援實時資料讀寫的分散式儲存系統。
儲存在HBase中的表的典型特徵:

  • 大表(BigTable):一個表可以有上億行,上百萬列
  • 面向列:面向列的儲存、檢索與許可權控制
  • 稀疏:表中為空(null)的列不佔用儲存空間

2.HBase叢集典型部署組網

1.png

Master:又叫HMaster,負責HBase中Table和Region的管理,包括表的增刪改查;Region Server的負載均衡,Region分佈調整;Region分裂以及分裂後的Region分配;Region Server失效後的Region遷移等。
ZooKeeper cluster:

Zookeeper叢集儲存-ROOT-表的地址和Master地址,Region Server主動向Zookeeper註冊,使得Master可隨時感知各Region Server的健康狀態。 Zookeeper另一個重要作用是避免Master 單點故障(SPOF)。
RegionServer:負責資料路由、資料讀寫和資料持久化,是HBase 的資料處理和計算單元,同時還負責區域的分割(即Region Split)。 RegionServer要求和HDFS的DataNode一起部署。

3.HBase系統架構

 

2.png


HBase Client:Client使用HBase的RPC機制與HMaster、HRegionServer 進行通訊。 Client與HMaster進行管理類通訊,與HRegion Server進行資料操作類通訊。

 

HRegionServer:HRegionServer內部管理了一系列HRegion物件,每個HRegion對應Table中的一個Region。HRegion由多個Store組成。每個Store對應Table中的一個ColumnFamily的儲存,即一個Store管理一個Region上的一個列族(CF)。每個Store包含一個MemStore和0到多個StoreFile。 Store是HBase的儲存核心,由MemStore 和 StoreFile組成。

HLog:資料在寫入時,首先寫入預寫日誌(Write AheadLog),每個HRegionServer服務的所有Region的寫操作日誌都儲存在同一個日誌檔案中。資料並非直接寫入HDFS,而是等快取到一定數量再批量寫入,寫入完成後在日誌中做標記。

MemStore and StoreFile:MemStore是 一個有序的記憶體快取區,使用者寫入的資料首先放入MemStore,當MemStore滿了以後Flush成一個StoreFile(儲存時對應為HFile), 當StoreFile數量增到一定閾值,觸發Compact合併,將多個StoreFiles合併成一個StoreFile。StoreFiles 合併後逐步形成越來越大的StoreFile,當Region內所有StoreFiles(Hfile)的總大小超過閾值(hbase.hregion.max.filesize)即觸發分裂Split,把當前的Region Split成2個Region,父Region下線,新Split出的2個孩子Region被HMaster分配到合適的HRegionServer 上,使得原先1個Region的壓力得以分流到2個Region上。

4.HBase資料模型

儲存在HBase表每一行資料都有可排序的關鍵字(Row Key)和任意列項(Column &Column Family)。在HBase中,僅能通過主鍵(Row Key)和主鍵版本號來檢索資料,僅支援單行事務。下面以HBase儲存搜尋引擎的網頁為例:

3.png


Row Key:行鍵,相當於關係表的主鍵,每一行資料的唯一標識。字串、整數、二進位制串都可以作為RowKey。所有記錄按照RowKey排序後儲存。

 

Time Stamp:每次資料操作對應的時間戳,資料按時間戳區分版本,每個Cell的多個版本的資料按時間倒序儲存。

ColumnFamily:Column Family,列簇,一個表在水平方向上由一個或多個CF組成。一個CF可以由任意多個Column組成。Column是CF下的一個標籤,可以在寫入資料時任意新增,因此CF支援動態擴充套件,無需預先定義Column的數量和型別。 HBase中表的列非常稀疏,不同行的列的個數和型別都可以不同。此外,每個CF都有獨立的TTL(生存週期)。可以只對行上鎖,對行的操作始終是原始的。

5.HBase的物理儲存結構

建表時預設只有一個Region,如果指定Split Key,就會有多個Region。當表的記錄行超過閾值,表按水平方向分割成2個Region,可把Region理解為子表。當Region的行數超過閾值,Region繼續分裂。不同的Region被HMaster分配給合適的HRegionServer管理。每個Region都包含一個隨機ID,Region內的資料按照Row Key有序儲存。

 

11.PNG

 

HBase在進行資料儲存時,物理上將同“列簇”的資料儲存在一起,不同“列簇”的資料分開儲存。例如這裡的Store1-1對應儲存表Region1上的CF1的所有資料,底層實際儲存時為一個HFile。

 

114.PNG

HBase檔案目錄講解:

  • HDFS在檔案系統根目錄下為HBase建立專用儲存目錄。
  • 在HBase目錄下按照表名建立子目錄
  • 在表名子目錄下存放HBase Region塊目錄
  • 在Region塊目錄下按照所存放表的CF建立子目錄,同時該目錄下有一個固定的檔案regioninfo目錄
  • regioninfo目錄下建立的檔案用來存放表的Scheme資訊
  • Column Family下放置的是該CF的HFile檔案



作者:狼牙戰士
連結:https://www.jianshu.com/p/4e7c4ccf4020
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。