1. 程式人生 > >Hadoop學習筆記—15.HBase框架學習(基礎知識篇)

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

dfs hdfs keep 負載均衡 包含 兩個 列族 文件存儲 version

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

一、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中遷移變的非常方便。

二、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的系統架構

技術分享

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

原文鏈接:http://www.cnblogs.com/edisonchou/

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