HBase
一、簡介
hbase是bigtable的開源山寨版本。是建立的hdfs之上,提供高可靠性、高效能、列儲存、可伸縮、實時讀寫的資料庫系統。
它介於nosql和RDBMS之間,僅能通過主鍵(row key)和主鍵的range來檢索資料,僅支援單行事務(可通過hive支援來實現多表join等複雜操作)。主要用來儲存非結構化和半結構化的鬆散資料。
與hadoop一樣,Hbase目標主要依靠橫向擴充套件,通過不斷增加廉價的商用伺服器,來增加計算和儲存能力。
HBase中的表一般有這樣的特點
1 大:一個表可以有上億行,上百萬列
2 面向列:面向列(族)的儲存和許可權控制,列(族)獨立檢索。
3稀疏:對於為空(null)的列,並不佔用儲存空間,因此,表可以設計的非常稀疏。
二、邏輯檢視
時間戳
HBase中通過row和columns確定的為一個存貯單元稱為cell。每個 cell都儲存著同一份資料的多個版本。版本通過時間戳來索引。時間戳的型別是 64位整型。時間戳可以由hbase(在資料寫入時自動 )賦值,此時時間戳是精確到毫秒的當前系統時間。時間戳也可以由客戶顯式賦值。如果應用程式要避免資料版本衝突,就必須自己生成具有唯一性的時間戳。每個 cell中,不同版本的資料按照時間倒序排序,即最新的資料排在最前面(timestamp越大,值越新)。
為了避免資料存在過多版本造成的的管理 (包括存貯和索引)負擔,hbase提供了兩種資料版本(Version)回收方式。一是儲存資料的最後n個版本,二是儲存最近一段時間內的版本(比如最近七天)。使用者可以針對每個列族進行設定。
Cell
由{row key, column( =<family> + <label>), version} 唯一確定的單元。cell中的資料是沒有型別的,全部是位元組碼形式存貯。
三、物理儲存
1 已經提到過,Table中的所有行都按照row key的字典序排列。
2 Table 在行的方向上分割為多個Hregion。
3 region按大小分割的,每個表一開始只有一個region,隨著資料不斷插入表,region不斷增大,當增大到一個閥值的時候,Hregion就會等分會兩個新的Hregion。當table中的行不斷增多,就會有越來越多的Hregion。
4 Hregion是Hbase中分散式儲存和負載均衡的最小單元。最小單元就表示不同的Hregion可以分佈在不同的HRegion
server上。但一個Hregion是不會拆分到多個server上的。
5 HRegion雖然是分散式儲存的最小單元,但並不是儲存的最小單元。
事實上,HRegion由一個或者多個Store組成,每個store儲存一個列族。
每個Strore又由一個memStore和0至多個StoreFile組成。MemStore駐留在記憶體,資料到來時首先更新到MemStore,當MemStore到達閥值之後,更新到對應的StroreFile中。StoreFile以HFile格式儲存在HDFS上。
Hlog檔案用於故障恢復。例如某一臺HRegionServer發生故障,那麼它所維護的HRegion會被重新分配到新的機器上。這時Hlog會按照HRegion進行劃分。新的機器在載入HRegion的時候可以通過Hlog對資料進行恢復。
四、系統架構
Client
1 包含訪問hbase的介面,client維護著一些cache來加快對hbase的訪問,比如regione的位置資訊。
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 GFS上的垃圾檔案回收
5 處理schema更新請求
Region Server
1 Region server維護Master分配給它的region,處理對這些region的IO請求
2 Region server負責切分在執行過程中變得過大的region
可以看到,client訪問hbase上資料的過程並不需要master參與(定址訪問zookeeper和region server,資料讀寫訪問regione server),master僅僅維護者table和region的後設資料資訊,負載很低。
五、ROOT表和META表
六、讀取資料過程
七、HBase與RDBMS的區別
相關文章
- hbase之hbase shell
- Hbase(二)Hbase常用操作
- hbase - [04] java訪問hbaseJava
- HBase 教程:什麼是 HBase?
- HBase 系列(五)——HBase常用 Shell 命令
- Hbase單機部署 java連線HbaseJava
- Hbase一:Hbase介紹及特點
- HBase概述
- hbase整理
- HBase實操:HBase-Spark-Read-Demo 分享Spark
- HBase2實戰:HBase Flink和Kafka整合Kafka
- HBase學習之二: hbase分頁查詢
- hbase與phoenix整合(使用phoenix操作hbase資料)
- spark與hbaseSpark
- HBase學習
- HBase vs HiveHive
- HBase進階
- hbase shell命令
- Hbase優化優化
- php使用hbasePHP
- Jave Hbase AP
- HBase 基本操作
- hbase - [03] 客戶端常用命令(hbase shell)客戶端
- 《HBase 不睡覺》第三章 – HBase 基本操作
- 《HBase 不睡覺》第三章 - HBase 基本操作
- HBase入門教程
- Hbase基礎篇
- kafka+storm+hbaseKafkaORM
- 深入探討HBASE
- HBase Replication詳解
- Pinterest 棄用 HBaseREST
- hbase過濾器過濾器
- hbase 啟動它!
- 【Hadoop】HBase元件配置Hadoop元件
- hbase region 合併
- Hbase優化入門優化
- HBASE叢集搭建
- Hbase表設計