分佈式開源數據庫_HBase入門介紹

一、HBase簡介


1.概念
HBase是bigtable的開源山寨版本。是建立在HDFS之上,提供高可靠性、高性能、列存儲、可伸縮、實時讀寫的分佈式列存儲的開源數據庫系統。
  HBase是Apache的Hadoop 項目的子項目。 
HBase中每張表的記錄數(行數)可多達幾十億條,甚至更多,每條記錄可以擁有多達上百萬的字段。而這樣的存儲能力卻不需要特別的硬件,普通的服務器集羣就可以勝任。


2.技術特點
 1)大表:一個表可以有上億行,上百萬列,提供海量數據存儲能力,可提供高達幾百億條數據記錄存儲能力;
 2)列式存儲:面向列族(Column Family)的存儲和權限控制,列族獨立檢索;
 3)表數據是稀疏的多維映射表。表中的數據通過一個行關鍵字(row key)、一個列關鍵字(column key)以及一個時間戳(time stamp)進行索引和查詢定位,通過時間戳允許數據有多個版本;
4)NoSQL的典型代表產品。適合於非結構化數據存儲的數據庫。

注:Hbase在物理實現上並不存在傳統數據庫的二維表的概念。因此,二維表中字段值的空洞,對於Hbase在物理實現上是不存在的,而不是所謂的值爲null.
稀疏:指一個行,一般來說只是在某個列族上存在值,而在其他列族上不存在值。


二、HBase的數據模型

HBase表是一個分佈式多維表,表中的數據通過一個行關鍵字(row key)、一個列族和列名(column family,column name)和一個時間戳(time stamp)進行索引和查詢定位。

下面是截取自《深入理解大數據---大數據處理與編程實踐》(黃宜華)上的圖片:


1.HBase表實例

在實際的HDFS存儲中,直接存儲的是每個字段數據所對應的完整的鍵值對:
   {row key,column family,column name,timestamp}--->value

例如上表中,key3行Address字段下t2時間戳下的Shanghai,存儲時的完整鍵值對是:
   {key3,PersonnalInfo,Address,t2}--->Shanghai

下面對rowkey、column family、column name、time stamp進行簡要的介紹:


1.Row Key
HBase一張表中可以有上億行記錄,每一行都由一個行關鍵字(row key)來標識。
特點:
(1)HBase保證對所有行按照row key進行字典序(byte order)排序。設計key時,要充分排序存儲這個特性,將經常一起讀取的行存儲放到一起。(位置相關性)
(2)Row key行鍵 (Row key)可以是任意字符串(最大長度是 64KB,實際應用中長度一般爲 10-100bytes),在hbase內部,row key保存爲字節數組。
(3)HBase中的row key 只能是一個字段而不能是多個字段的組合。(這與關係型數據庫的主鍵(primary不同))。


2.列族和列
hbase表中的每個列,都歸屬於某個列族。

列族是表的schema(模式)的一部分(而列不是),必須在使用表之前定義。
列名都以列族作爲前綴。例如courses:history,courses:math都屬於courses 這個列族。
特點:在每個列族中,可以存放很多的列,而每行每列族中的列數量可以不同,數量可以很大。列是不需要靜態定義的,每行都可以動態的增加和減少列。


3.時間戳

HBase中通過行關鍵字、列(列族名和列名)和時間戳的三元組確定一個存儲單元(cell)。

每個 cell都保存着同一份數據的多個版本。每個 cell中,不同版本的數據按照時間倒序排序,即最新的數據排在最前面。

版本通過時間戳來索引。時間戳的類型是 64位整型。
時間戳可以由hbase(在數據寫入時自動 )賦值,此時時間戳是精確到毫秒的當前系統時間。時間戳也可以由客戶顯式賦值。如果應用程序要避免數據版本衝突,就必須自己生成具有唯一性的時間戳。


三、Hbase在Hadoop Ecosystem中的位置

下圖描述了Hadoop EcoSystem中的各層系統,其中HBase位於結構化存儲層;
Hadoop HDFS爲HBase提供了高可靠性的底層存儲支持;
Hadoop MapReduce爲HBase提供了高性能的計算能力;
Zookeeper爲HBase提供了穩定服務failover(失效轉移)機制。
此外,Pig和Hive還爲HBase提供了高層語言支持,使得在HBase上進行數據統計處理變的非常簡單。

 Sqoop則爲HBase提供了方便的RDBMS數據導入功能,使得傳統數據庫數據向HBase中遷移變的非常方便。

                                                            

         2.Hadoop生態圈

四、HBase基本架構

                                   

                                                                         3. HBase基礎架構

由上圖可知:

1.Hbase集羣中有四種角色
Master、Region Server、client、Zookeeper。

Hbase Master :是Hbase集羣的主控制服務器,負責集羣狀態的管理維護。
Master:可以有多個,但只有一個是活躍的。
Region Server: 是HBase具體對外提供服務的進程。一個Region Server一般是一臺單獨的計算機,既一個物理節點。
Zookeeper:分佈式協調服務器。Zookeeper用以提供可靠的鎖服務,並提供可靠的狀態數據小文件的讀寫。Zookeeper保證了集羣中所有的機器看到是視圖是一致的。HBase使用Zookeeper服務來進行結點的管理以及表數據的定位。


(注:一個物理節點一般只運行一個Region Server,但是它可以管理很多的實例(Region),一個Region Server上的Region可以是來自於不同的表。)


2.幾種角色的具體職責

Client
1 )包含訪問hbase的接口,client維護着一些cache來加快對hbase的訪問,比如region的位置信息。
Zookeeper
1) 保證任何時候,集羣中只有一個master;
2 )存儲所有Region的尋址入口;
3 )實時監控Region Server的狀態,將Region server的上線和下線信息實時通知給Master;
4 )存儲Hbase的schema,包括有哪些table,每個table有哪些column family

Master
1) 爲Region server分配region;
2 )負責region server的負載均衡;
3 )發現失效的region server並重新分配其上的region;
4 )HDFS上的垃圾文件回收;
5 )處理schema更新請求。
Region Server
1 )Region server維護Master分配給它的region,處理對這些region的IO請求;
2 )Region server負責切分在運行過程中變得過大的region;

可以看到,client訪問hbase上數據的過程並不需要master參與(尋址訪問zookeeper和region server,數據讀寫訪問region server),master僅僅維護者table和region的元數據信息,負載很低。


五、HBase物理存儲(HBase Region

 1.已經提到過,Table中的所有行都按照row key的字典序排列。

2. Table 在行的方向上分割爲多個Region。
(Region是HBase調度的基本單位。每個Region都是不一樣大小的。)

                                                                          

               4.Region與Table中的關係


3 Region按大小分割的,每個表一開始只有一個Region,隨着數據不斷插入表,Region不斷增大,當增大到一個閥值的時候,Region就會被分成兩個新的Region。當table中的行不斷增多,就會有越來越多的Region。

                                                     

                                                                                                               5. Region的分裂

4. Region是Hbase中分佈式存儲和負載均衡的最小單元。每個Region的最佳大小建議爲1GB-2GB(2013年以後的硬件配置)。

最小單元就表示不同的Region可以分佈在不同的Region Server上。(每個Region Server上存儲10-1000個Region)

但一個Region是不會拆分到多個Server上的。

一個Region Server一般是一臺物理機。

                                                    

6.Region在Region上的分佈

5 HRegion雖然是分佈式存儲的最小單元,但並不是存儲的最小單元。
事實上,HRegion由一個或者多個Store組成,每個store保存一個columns family。
每個Strore又由一個memStore和0至多個StoreFile組成。如圖:
StoreFile以HFile格式保存在HDFS上。

                                                       

    7.Region與Store


六、HBase系統架構


8.HBase系統架構


由上圖可知,

一個RegionServer上有多個Region(每個Region Server上存儲10-1000個Region);

一個Region實例,包括Hlog日誌和存放數據的Store(一個Region只有一個HLog和多個Store);

一個Store包含memStore和StoreFile。(memStore:內存中的Store , StoreFile:硬盤上的Store)


Store的存儲機制是怎樣的呢?

一個region由多個store組成,每個store包含一個列族的所有數據 ;
Store包括位於把內存的memstore和位於硬盤的storefile ;
寫操作先寫入memstore,當memstore中的數據量達到某個閾值,Hregionserver會啓動flashcache進程寫入storefile,每次寫入形成單獨一個storefile; 
當storefile文件的數量增長到一定閾值後,系統會進行合併,在合併過程中會進行版本合併和刪除工作,形成更大的storefile ;
當storefile大小超過一定閾值後,會把當前的region分割爲兩個,並由Hmaster分配到相應的region服務器,實現負載均衡 ;
客戶端檢索數據時,先在memstore找,找不到再找storefile。


Hbase和Hadoop之間是什麼關係呢?

HBase整個數據的存儲,並不是直接和底層的磁盤打交道的,而是藉助於Hadoop上的分佈式文件系統HDFS取完成數據存儲的,而HDFS是架構在底層的Hdoop集羣之上。

如上圖在Store上的每個StoreFile以HFile文件格式保存在HDFS上。而這些HFile文件在HDFS裏面可能是分佈式的,分佈存儲在不同的物理節點上。


HLog文件?
  分佈式環境必須考慮HBase採用HLog保證系統恢復,HBase爲每個Region只有一個HLog文件。

它是一種預寫式日誌(Write Ahead  Log),用戶的更新數據必須首先寫入日誌後,才能寫入MemStore緩存,並且直到MemStore緩存內容對應的日誌已經寫入磁盤,該緩存內容纔會被刷寫到磁盤。



下面對上面的總體架構做個簡單概括:

Hmaster作爲總控節點; 
Zookeeper負責調度 ;
HBase中的表,在行方向上,按照行鍵範圍劃分成若干的Region; 
每個表最初只有一個region,當記錄數增加到超過某個閾值時,開始分裂成兩個region;
一臺物理節點只能跑一個HRegionServer;
一個Hregionserver可以管理多個Region實例;
一個Region實例包括Hlog日誌和存放數據的Store; 
Store包括位於把內存的memstore和位於硬盤的storefile ;
storfile對應Hfile,Hfile是HDFS中的文件;
物理上所有數據存放在HDFS,由Region Server提供region的管理 。


七、Region的定位

                                              

                                                                                                     9.HBase的三層結構


HBase中有兩張特殊的Table,-ROOT-和.META. 
 .META(元數據表).:記錄了用戶表的Region信息,既存儲了Region和Region Server的映射關係。當HBase表很大時,一個.META.表可以分裂成多個regoin ;
 -ROOT-(根數據表):記錄了.META.表的Region位置信息,-ROOT-只有一個region ;
Zookeeper中記錄了-ROOT-表的位置信息 。


















































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