1. 程式人生 > >Hbase(概念-資料模型-架構)

Hbase(概念-資料模型-架構)

初識Hbase

Hadoop Database,是一個高可靠性、高效能、面向列、可伸縮、實時讀寫的分散式資料庫

利用Hadoop HDFS作為其檔案儲存系統,利用Hadoop MapReduce來處理HBase中的海量資料,利用Zookeeper作為其分散式協同服務

主要用來儲存非結構化和半結構化的鬆散資料(列存 NoSQL 資料庫)

                

  上圖描述了Hadoop EcoSystem中的各層系統,其中HBase位於結構化儲存層,Hadoop HDFS為HBase提供了高可靠性的底層儲存支援,Hadoop MapReduce為HBase提供了高效能的計算能力,Zookeeper為HBase提供了穩定服務和failover機制。

  此外,Pig和Hive還為HBase提供了高層語言支援,使得在HBase上進行資料統計處理變的非常簡單。 Sqoop

則為HBase提供了方便的RDBMS資料匯入功能,使得傳統資料庫資料向HBase中遷移變的非常方便。

HBase資料模型


ROW  KEY 

決定一行資料,按照字典順序排序的,Row key只能儲存64k的位元組資料

Column Family列族 & qualifier列

HBase表中的每個列都歸屬於某個列族,列族必須作為表模式(schema)定義的一部分預先給出。如 create ‘test’, ‘course’;
列名以列族作為字首,每個“列族”都可以有多個列成員(column);如course:math, course:english, 新的列族成員(列)可以隨後按需、動態加入;
許可權控制、儲存以及調優都是在列族層面進行的;
HBase把同一列族裡面的資料儲存在同一目錄下,由幾個檔案儲存。


Timestamp時間戳
在HBase每個cell儲存單元對同一份資料有多個版本,根據唯一的時間戳來區分每個版本之間的差異,不同版本的資料按照時間倒序排序,最新的資料版本排在最前面。
時間戳的型別是 64位整型。
時間戳可以由HBase(在資料寫入時自動)賦值,此時時間戳是精確到毫秒的當前系統時間。
時間戳也可以由客戶顯式賦值,如果應用程式要避免資料版本衝突,就必須自己生成具有唯一性的時間戳。

Cell單元格
由行和列的座標交叉決定;
單元格是有版本的;
單元格的內容是未解析的位元組陣列;
由{row key, column( =<family> +<qualifier>), version} 唯一確定的單元。
cell中的資料是沒有型別的,全部是位元組碼形式存貯。


HLog(WAL log)

HLog檔案就是一個普通的Hadoop Sequence File,Sequence File 的Key是HLogKey物件,HLogKey中記錄了寫入資料的歸屬資訊,除了table和region名字外,同時還包括 sequence number和timestamp,timestamp是” 寫入時間”,sequence number的起始值為0,或者是最近一次存入檔案系統中sequence number。
HLog SequeceFile的Value是HBase的KeyValue物件,即對應HFile中的KeyValue。

HBase架構

Client
包含訪問HBase的介面並維護cache來加快對HBase的訪問

Zookeeper
保證任何時候,叢集中只有一個master
存貯所有Region的定址入口。
實時監控Region server的上線和下線資訊。並實時通知Master
儲存HBase的schema和table元資料

Master
為Region server分配region
負責Region server的負載均衡
發現失效的Region server並重新分配其上的region
管理使用者對table的增刪改操作
能、面向列、可伸縮、實時讀

RegionServer
Region server維護region,處理對這些region的IO請求
Region server負責切分在執行過程中變得過大的region

Region
HBase自動把表水平劃分成多個區域(region),每個region會儲存一個表裡面某段連續的資料
每個表一開始只有一個region,隨著資料不斷插入表,region不斷增大,當增大到一個閥值的時候,region就會等分會兩個新的region(裂變)
當table中的行不斷增多,就會有越來越多的region。這樣一張完整的表被儲存在多個Regionserver 上。

Memstore 與 storefile
一個region由多個store組成,一個store對應一個CF(列族)
store包括位於記憶體中的memstore和位於磁碟的storefile寫操作先寫入memstore,當memstore中的資料達到某個閾值,hregionserver會啟動flashcache程序寫入storefile,每次寫入形成單獨的一個storefile
當storefile檔案的數量增長到一定閾值後,系統會進行合併(minor、major compaction),在合併過程中會進行版本合併和刪除工作(majar),形成更大的storefile
當一個region所有storefile的大小和數量超過一定閾值後,會把當前的region分割為兩個,並由hmaster分配到相應的regionserver伺服器,實現負載均衡
客戶端檢索資料,先在memstore找,找不到再找storefile

HRegion是HBase中分散式儲存和負載均衡的最小單元。最小單元就表示不同的HRegion可以分佈在不同的 HRegion server上。
HRegion由一個或者多個Store組成,每個store儲存一個columns family。
每個Strore又由一個memStore和0至多個StoreFile組成。如圖:StoreFile以HFile格式儲存在HDFS上。