HBase架構詳解及讀寫流程

目錄
一、HBase存儲結構詳解
二、HBase寫流程
三、HBase讀流程

Hbase是bigtable的開源山寨版本。是建立的hdfs之上,提供高可靠性、高性能、列存儲、可伸縮、實時讀寫的數據庫系統。

它介於nosql和RDBMS之間,僅能通過主鍵(row key)和主鍵的range來檢索數據,僅支持單行事務(可通過hive支持來實現多表join等複雜操作)。主要用來存儲非結構化和半結構化的鬆散數據。

與hadoop一樣,Hbase目標主要依靠橫向擴展,通過不斷增加廉價的商用服務器,來增加計算和存儲能力。

HBase 中的表一般有這樣的特點:
1、大:一個表可以有上十億行,上百萬列;
2、面向列:面向列(族)的存儲和權限控制,列(族)獨立檢索;
3、稀疏:對於爲空(null)的列,並不佔用存儲空間,因此,表可以設計的非常稀疏。

一、HBase儲存結構詳解

目錄
1.1、HDFS
1.2、HMaster
1.3、HRegionServer
1.4、HRegion
1.4.1、Region/Store/StoreFile/Hfile之間的關係


從上面的架構圖可以看出HBase是建立在hadoop之上的,HBase底層依賴於HDFS。HBase有3個重要的組件:Zookeeper、HMaster、HRegionServer。

Zookeeper爲整個HBase集羣提供協助的服務,HMaster主要用於監控和操作集羣的所有RegionServer。RegionServer主要用於服務和管理分區(Regions)

1.1、HDFS

HBase底層依賴於HDFS的

1.2、HMaster

HMaster是HBase集羣架構中的主節點,通常一個HBase集羣存在多個HMaster節點,其中一個爲Active Master,其餘爲Backup Master。

Hbase每時每刻只有一個HMaster主服務器程序在運行,HMaster將region分配給HRegionServer,協調HRegionServer的負載並維護集羣的狀態。Hmaster不會對外提供數據服務,而是由HRegionServer負責所有regions的讀寫請求及操作。

由於HMaster只維護表和region的元數據,負責Region的分配及數據庫的創建和刪除等操作而不參與數據的輸入/輸出過程,HMaster失效僅僅會導致所有的元數據無法被修改,但表的數據讀/寫還是可以正常進行的。
備註:region,HRegionServer職責與功能下面內容中會講解

1.2.1HMaster的作用:

A、調控Region server的工作
爲Region server分配region,
負責HRegionServer的負載均衡,,
監控集羣中的Region server的工作狀態, 發現失效的HRegionServer並重新分配其上的Hregion(通過監聽zookeeper對於ephemeral node狀態的通知)。
備註:
HRegion,習慣把它稱爲region,表的意思
HRegionServer,習慣把它稱爲Region server,HRegionServer是HBase集羣架構中的從節點

B、管理數據庫
提供創建,刪除或者更新表格的接口。

1.3、HRegionServer

HRegionServer是HBase集羣架構中的從節點,HBase中的表是根據row key的值水平分割成所謂的region的。一個region包含表中所有row key位於region的起始鍵值和結束鍵值之間的行。

集羣中負責管理Region的結點叫做Region server。Region server負責數據的讀寫。每一個Region server大約可以管理1000個region。
備註:HRegionServer,習慣把它稱爲Region server,HRegionServer是HBase集羣架構中的從節點。(一些文章寫的是Region server、一些寫的是HRegionServer,兩個意思都是一樣的)

1.3.1、HRegionServer由如下幾個部分組成
一個HRegionServer會有多個HRegion和一個HLog。
HLog:預寫入日誌,防止內存中數據丟失
HRegion:表,一個HRegionServer可以維護多個HRegion(習慣稱爲一個Region Server可以維護多個Region)

1.3.2、HRegionServer的職責
維護HMaster分配給它的HRegion,處理對這些HRegion的IO請求,也就是說客戶端直接和HRegionServer打交道。

參考文章:HBase深入分析之RegionServerhttps

1.4、HRegion

概述

Region是HBase數據管理的基本單位,每個HRegion由多個Store構成,每個Store保存一個列族(Columns Family),表有幾個列族,則有幾個Store,每個Store由一個MemStore和多個StoreFile組成,MemStore是Store在內存中的內容,寫到文件後就是StoreFile,StoreFile底層是以HFile的格式保存。
Region相當於數據庫中的表

1.4.1、Region/Store/StoreFile/Hfile之間的關係

以下內容轉載自文章:Hbase中Region/Store/StoreFile/Hfile之間的關係 ,這篇文章寫的超級好,擔心原文刪除,將文章內容摘錄到本篇文章。

1.4.1.1、 Region

table在行的方向上分隔爲多個Region。Region是HBase中分佈式存儲和負載均衡的最小單元,即不同的region可以分別在不同的Region Server上,但同一個Region是不會拆分到多個server上。

Region按大小分隔,表中每一行只能屬於一個region。隨着數據不斷插入表,region不斷增大,當region的某個列族達到一個閾值(默認256M)時就會分成兩個新的region。

1.4.1.2、 Store

每一個region有一個或多個store組成,至少是一個store,hbase會把一起訪問的數據放在一個store裏面,即爲每個ColumnFamily建一個store(即有幾個ColumnFamily,也就有幾個Store)。一個Store由一個memStore和0或多個StoreFile組成。

HBase以store的大小來判斷是否需要切分region。
store的數據存儲在兩個地方MemStore和StoreFile

1.4.1.3、 MemStore

寫緩存,memStore 是放在內存裏的。由於 HFile 中的數據要求是有序的,所以數據是先存儲在 MemStore 中,排好序後,等到達刷寫時機纔會刷寫到 HFile(當memStore的大小達到一個閥值【默認64MB】時,memStore會被flush到文件),每次刷寫都會形成一個新的 HFile。

1.4.1.4、StoreFile

memStore內存中的數據寫到文件後就是StoreFile(即memstore的每次flush操作都會生成一個新的StoreFile),StoreFile底層是以HFile的格式保存。

1.4.1.5、HFile

HFile是HBase中KeyValue數據的存儲格式,是hadoop的二進制格式文件。一個StoreFile對應着一個HFile。而HFile是存儲在HDFS之上的。

二、HBase寫流程

1、客戶端先訪問zookeeper,獲取Meta表位於那個region server
2、訪問Meta表對應的region server服務器,根據請求的信息(namespace:table/rowkey),在meta表中查詢出目標數據位於哪個region server的哪個region中。
並將該表的region信息以及meta表的位置信息緩存到客戶端的meta cache,方便下次訪問。
3、與目標數據的region server進行通訊
4、將數據寫入到WAL中
5、將數據寫入到對應的memstore中,
6、向客戶端發送寫入成功的信息
7、等達到memstore的刷寫時機後,將數據刷寫到HFILE中

參考文章:查看hbase:meta 表位於哪個 Region Server

三、HBase讀流程

1、Client客戶端先訪問zookeeper,獲取 hbase:meta 表位於哪個Region Server
2、訪問hbase:meta 表對應的region server服務器,根據請求的信息(namespace,table,rowkey),查詢出目標表位於哪個Region Server中的哪個region。
並將該表的region信息,以及meta表的位置信息緩存在客戶端的緩存中,以便下次訪問。
3、與目標表所在的region server 進行通訊
4、分別在Block Cache(讀緩存)MemStore和 Store File查詢目標數據,並將查到的數據進行合併,此處所有數據是指同一條數據的不同版本(time stamp)或者不同的類型(Put/Delete)
5、 將從文件中查詢到的數據塊緩存到block cache
6、 將合併後的數據返回給客戶端

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章