Hadoop學習筆記—15.HBase框架學習(基礎知識篇)

HBase是Apache Hadoop的數據庫,可以對大型數據提供隨機、實時的讀寫訪問。HBase的目標是存儲並處理大型的數據。HBase是一個開源的,分佈式的,多版本的,面向列的存儲模型,它存儲的是鬆散型數據。html

1、HBase:BigTable的開源實現

1.1 HBase出現的背景

  (1)隨着數據規模愈來愈大,大量業務場景開始考慮數據存儲水平擴展,使得存儲服務能夠增長/刪除,而目前的關係型數據庫更專一於一臺機器。算法

  (2)海量數據量存儲成爲瓶頸,單臺機器沒法負載大量數據。數據庫

  (3)單臺機器IO讀寫請求成爲海量數據存儲時候高併發,大規模請求的瓶頸。數組

  (4)當數據進行水平擴展時候,如何解決數據IO高一致性問題。結合Map/Reduce計算框架進行海量數據的離線分析。服務器

1.2 BigTable成就了HBase

  Google這個神奇的公司以其不保守的態度以學術論文的方式公開了其雲計算的三大法寶:GFS、MapReduce和BigTable,其中對於BigTable的開源實現HBase則是由Doug Cutting完成的。架構

  HBase是一個分佈式的、面向列的開源數據庫,該技術來源於 Fay Chang 所撰寫的Google論文「Bigtable:一個結構化數據的分佈式存儲系統」。就像Bigtable利用了Google文件系統(File System)所提供的分佈式數據存儲同樣,HBase在Hadoop之上提供了相似於Bigtable的能力。HBase是Apache的Hadoop項目的子項目。HBase不一樣於通常的關係數據庫,它是一個適合於非結構化數據存儲的數據庫。另外一個不一樣的是HBase基於列的而不是基於行的模式。併發

  HBase中的表通常有這樣的特色:負載均衡

  (1) 大:一個表能夠有上億行,上百萬列框架

  (2) 面向列:面向列(族)的存儲和權限控制,列(族)獨立檢索。分佈式

  (3) 稀疏:對於爲空(null)的列,並不佔用存儲空間,所以,表能夠設計的很是稀疏。

PS:什麼是列存儲?

列存儲不一樣於傳統的關係型數據庫,其數據在表中是按行存儲的,列方式所帶來的重要好處之一就是,因爲查詢中的選擇規則是經過列來定義的,所以整個數據庫是自動索引化的。按列存儲每一個字段的數據彙集存儲,在查詢只須要少數幾個字段的時候,能大大減小讀取的數據量,一個字段的數據彙集存儲,那就更容易爲這種彙集存儲設計更好的壓縮/解壓算法。下圖講述了傳統的行存儲和列存儲的區別:

1.3 HBase在Hadoop項目中的位置

  與FUJITSU Cliq等商用大數據產品不一樣,HBase是Google Bigtable的開源實現,相似Google Bigtable利用GFS做爲其文件存儲系統,HBase利用Hadoop HDFS做爲其文件存儲系統;Google運行MapReduce來處理Bigtable中的海量數據,HBase一樣利用Hadoop MapReduce來處理HBase中的海量數據;Google Bigtable利用 Chubby做爲協同服務,HBase利用Zookeeper做爲對應

  下圖展現了HBase在Hadoop生態系統體系結構中所處的位置:

  上圖描述了Hadoop生態系統中的各層系統。其中,HBase位於結構化存儲層Hadoop HDFS爲HBase提供了高可靠性的底層存儲支持Hadoop MapReduce爲HBase提供了高性能的計算能力Zookeeper爲HBase提供了穩定服務和失效轉移(FailOver)機制

  此外,Pig和Hive還爲HBase提供了高層語言支持,使得在HBase上進行數據統計處理變的很是簡單。 Sqoop則爲HBase提供了方便的RDBMS數據導入功能,使得傳統數據庫數據向HBase中遷移變的很是方便。

2、HBase的數據模型

  HBASE中的每一張表,就是所謂的BigTable,一張稀疏表。RowKeyColumnKey 是二進制值byte[],按字典順序排序;Timestamp 是一個 64 位整數;value 是一個未解釋的字節數組byte[]。表中的不一樣行能夠擁有不一樣數量的成員。即支持「動態模式「模型。

2.1 邏輯模型

  Table & Column Family

  HBase以表的形式存儲數據。表有行和列組成。列劃分爲若干個列族(row family),以下圖所示:

  Ø  Row Key: 行鍵,Table的主鍵,Table中的記錄按照Row Key排序

  Ø  Timestamp: 時間戳,每次數據操做對應的時間戳,能夠看做是數據的version number

  Ø  Column Family:列簇,Table在水平方向有一個或者多個Column Family組成,一個Column Family中能夠由任意多個Column組成,即Column Family支持動態擴展,無需預先定義Column的數量以及類型,全部Column均以二進制格式存儲,用戶須要自行進行類型轉換。

2.2 物理模型

 (1)物理存儲表示

  將邏輯模型中的一個Row分割爲根據Column family存儲的物理模型,以下圖所示:

 (2)Table & Region

  當Table隨着記錄數不斷增長而變大後,會逐漸分裂成多份splits,成爲regions,一個region由[startkey,endkey)表示,不一樣的region會被Master分配給相應的RegionServer進行管理,以下圖所示:

  由上可知,HBase的伸縮性主要依賴於其可分裂的HRegion可伸縮的分佈式文件系統HDFS,下面介紹一下HBase如何實現伸縮性:

  ①HBase中數據以HRegion爲單位進行管理,也就是說應用程序若是想要訪問一個數據,必須先找到HRegion,而後將數據讀寫操做提交給HRegion,由HRegion完成存儲層面的數據操做。

  ②每一個HRegion中存儲一段Key區間(例如:[Key1,Key2))的數據,HRegionServer是物理服務器,每一個HRegionServer上能夠啓動多個HRegion實例。當一個HRegion中寫入的數據太多,達到配置的閥值時,HRegion會分裂成兩個HRegion,並將HRegion在整個集羣中進行遷移,以使HRegionServer的負載均衡。

  ③全部的HRegion的信息都(例如:存儲的Key值區間、所在HRegionServer的IP地址和端口號等)記錄在HMaster服務器上。同時爲了保證高可用,HBase啓動了多個HMaster,並經過ZooKeeper(一個支持分佈式一致性的數據管理服務)選舉出一個主服務器,經過這個主HMaster服務器得到Key值所在的HRegionServer,最後請求該HRegionServer上的HRegion實例,得到須要的數據。其具體的數據尋址訪問流程以下圖所示:

hbase scuduling

3、HBase的系統架構

3.1 Client

  包含訪問hbase的接口,Client維護着一些cache來加快對hbase的訪問,好比regione的位置信息。

3.2 ZooKeeper

  (1) 保證任什麼時候候,集羣中只有一個master

  (2) 存貯全部Region的尋址入口。

  (3) 實時監控Region Server的狀態,將Region server的上線和下線信息實時通知給Master

  (4) 存儲Hbase的schema,包括有哪些table,每一個table有哪些column family

3.3 HMaster

  (1)爲Region Server分配Region

  (2)負責Region Server的負載均衡

  (3)發現失效的Region Server並從新分配其上的Region

  (4)GFS上的垃圾文件回收

  (5)處理Schema更新請求

  HMaster主要做用在於,經過HMaster維護系統表-ROOT-,.META.,記錄regionserver所對應region變化信息。此外還負責監控處理當前hbase cluster中regionserver狀態變化信息。

PS:兩張神奇的表:-ROOT-和.META

① .META.:記錄了用戶表的Region信息,.META.能夠有多個regoin
② -ROOT-:記錄了.META.表的Region信息,-ROOT-只有一個region

Zookeeper中記錄了-ROOT-表的location

Client訪問用戶數據以前須要首先訪問Zookeeper,而後訪問-ROOT-表,接着訪問.META.表,最後才能找到用戶數據的位置去訪問:

3.4 Region Server

  (1)Region Server維護HMaster分配給它的Region,處理對這些Region的IO請求

  (2)Region Server負責切分在運行過程當中變得過大的Region

  能夠看出,client 訪問hbase 上數據的過程並不須要master 參與,尋址訪問zookeeper 和region server,數據讀寫訪問regioneserver。HRegionServer主要負責響應用戶I/O請求,向HDFS文件系統中讀寫數據,是HBase中最核心的模塊。

參考資料

  (1)奧特MAN,《HBase入門篇》:http://www.uml.org.cn/sjjm/201212141.asp

  (2)加俊,《HBase簡介》:http://jiajun.iteye.com/blog/899632

  (3)百度百科,《HBase》:http://baike.baidu.com/view/1993870.htm

  (4)reck for zhou,《HBase介紹》:http://www.cnblogs.com/reckzhou/archive/2012/03/22/2412002.html

 

相關文章
相關標籤/搜索