hadoop學習筆記----- Hbase理論

Hadoop Database

便於時間查詢; 

Hbase是一個分佈式的、面向列的開源數據庫,該技術來源於Chang et al所寫的Google論文“Bigtable:一個結構化數據的分佈式存儲系統”。

就像Bigtable利用了Google文件系統(File System)所提供的分佈式數據存儲一樣,HBaseHadoop之上提供了類似於Bittable的能力。

HBaseApacheHadoop項目的子項目。

HBase不同於一般的關係數據庫,它是一個適合於非結構化數據存儲的數據庫,另一個不同的是HBase基於列的而不是基於行的模式。

 

 

BIG Table表的想法:

以存放關係的學生表爲例:

bigtable的想法爲,三個列的大表:學號(key)、屬性(姓名、年齡、、、)、值(value

 

世界上所有的二維表,都可以用三個列的大表來表示:

行鍵(key)對象的標識值、

屬性、

Value

 

Bigtable表查詢:  key-value的查詢很快

 

HBase邏輯模型:

以表的形式存放數據;

表由行與列組成,每個列屬於某個列族,由行和列確定的存儲單元稱爲元素;

每個元素保存了同一份數據的多個版本,由時間戳來標識區分;

HABASE有多表

列族需要預先定義,列族裏面的列不需要預先定義列族裏面的列由限定符限制;

 

行鍵可以重複;

 

HBASE解決HDFS文件系統不能修改問題:

打刪除標記

在內存中建立機制,數據存儲內存,數據在內存中修改(追加、)內存中數據重整機制、

內存中收集一定時間的數據後,向硬盤中一寫就一個文件一個塊

每隔一斷時間進行一數據重整合並,合併小的文件,解決刪除問題

 

 

行鍵:

 

行鍵是數據行在表裏的唯一標識,並作爲檢索記錄的主鍵;

訪問表裏的行只有三種方式:

         通過單個行鍵訪問

         給定行鍵的範圍訪問

         全表掃描

行鍵可以是最大長度不超過64kb的任意字符串,並按照字典序存儲;

對於經常要一起讀取的行,要對行鍵值精心設計,以便它們能放在一起存儲;

 

列族與列:

 

列表示爲<列族>:<限定符>

列族是預先定義好的,列族中的列是隨意添加的。

Hbase在磁盤上按照列族存儲數據,這種列式數據庫的設計非常適合於數據分析的情形;

列族裏的元素最好具有相同的讀寫方式(例如等長的字符串),以提高性能;

面向列存儲意義:在行鍵相同的情況下,列族相同的會放在一起,

 

時間戳:

 

對應每次數據操作的時間,可由系統自動生成,也可以由用戶顯示的賦值;

HBase支持兩種數據版本回收方式:

1、每個數據單元,只存儲指定個數的最新版本

2、保存指定時間長度的版本

常見的客戶端時間查詢“某個時刻起的最新數據”或“給我全部版本的數據”

元素由行鍵,列族限定符,時間戳唯一決定;

元素以字節碼形式存放,沒有類型之分;

 


Hbase物理模型:

 wKioL1QHVYKzK1M7AAIcMsaxpOo869.jpg

 

 

RegionRegion服務器:

 

表在行方向上,按照行鍵範圍劃分成苦幹的Region;

每個表最初只有一個region,當記錄數增加到超過某個閾值時,開始分裂成兩個region

物理上所有數據存放HDFS,region服務器提供region的管理;

一臺物理節點只能跑一個 HRedionServer

一個 HRegionserver可以管理多個Region實例;

一個Region實例包括Hlog日誌和存放數據的Store

Hmaster作爲總控節點;

Zookeeper負責調度;

 

Hlog:

 

用於災難恢復;             

預寫式日誌,記錄所有更新操作,操作先記錄日誌,數據纔會寫入

 

-ROOT- .META.

 

HBase中兩張特殊的表

.META. -----à記錄了用戶表的Region信息, .META. 可以有多個region;

-ROOT- -----à記錄了 .META.表的region信息, --ROOT-  只有一個region;

Zookeeper中記錄了 –ROOT-表的location

 

Memstorestorefile:

 

一個region由多個store組成,每個store包含一個列族的所有數據

Store包括位於把內在的memstore和位於硬盤的storefile;

寫操作先寫memstore,當memstore中的數據量達到某個閾值,Hregionserver會啓動flashcache進程寫入storefile,每次寫入形成單獨的一個storefile

storefile文件的數量增長到一定閾值後,系統會進行合併,在合併過程中會進行版本合併和刪除工作,形成更大的storefile;

storefile大小超過一定閾值後,會把當前的region分割爲兩個,並由hmaster分配,到相應的region服務器,實現負載均衡;

客戶端檢索數據時,先在memstore找,找不到再找storefile

 

Hbase應用場景:

 

適用於大量寫,同時也有讀的(key --- value查詢、時間)

OLTP/OLAP不適合;聯機事務處理,隨機讀寫;

很適合按照時間排序top n的場景(社交網站等)

 

Hbase瓶頸是硬盤寫, oracle瓶頸是硬盤尋道時間,

 

列式數據庫與行式數據庫對比:

減少I/O讀取量。

壓縮,減少磁盤佔用;


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