1、 HBase基本介紹
簡介
hbase是bigtable的開源JAVA版本。是建立在hdfs之上,提供高可靠性、高性能、列存儲、可伸縮、實時讀寫nosql的數(shù)據(jù)庫系統(tǒng)。
它介于nosql和RDBMS之間,僅能通過主鍵(row key)和主鍵的range來檢索數(shù)據(jù),僅支持單行事務(wù)(可通過hive支持來實現(xiàn)多表join等復雜操作)。
主要用來存儲結(jié)構(gòu)化和半結(jié)構(gòu)化的松散數(shù)據(jù)。
Hbase查詢數(shù)據(jù)功能很簡單,不支持join等復雜操作,不支持復雜的事務(wù)(行級的事務(wù))
Hbase中支持的數(shù)據(jù)類型:byte[]
與hadoop一樣,Hbase目標主要依靠橫向擴展,通過不斷增加廉價的商用服務(wù)器,來增加計算和存儲能力。
HBase中的表一般有這樣的特點:
大:一個表可以有上十億行,上百萬列
面向列:面向列(族)的存儲和權(quán)限控制,列(族)獨立檢索。
稀疏:對于為空(null)的列,并不占用存儲空間,因此,表可以設(shè)計的非常稀疏。
HBase的發(fā)展歷程
HBase的原型是google的BigTable論文,受到了該論文思想的啟發(fā),目前作為Hadoop的子項目來開發(fā)維護,用于支持結(jié)構(gòu)化的數(shù)據(jù)存儲。
官方網(wǎng)站:http://hbase.Apache.org
* 2006年Google發(fā)表BigTable白皮書
* 2006年開始開發(fā)HBase
* 2008 HBase成為了 Hadoop的子項目
* 2010年HBase成為Apache頂級項目
2、HBase與Hadoop的關(guān)系
1、HDFS
* 為分布式存儲提供文件系統(tǒng)
* 針對存儲大尺寸的文件進行優(yōu)化,不需要對HDFS上的文件進行隨機讀寫
* 直接使用文件
* 數(shù)據(jù)模型不靈活
* 使用文件系統(tǒng)和處理框架
* 優(yōu)化一次寫入,多次讀取的方式
2、HBase
* 提供表狀的面向列的數(shù)據(jù)存儲
* 針對表狀數(shù)據(jù)的隨機讀寫進行優(yōu)化
* 使用key-value操作數(shù)據(jù)
* 提供靈活的數(shù)據(jù)模型
* 使用表狀存儲,支持MapReduce,依賴HDFS
* 優(yōu)化了多次讀,以及多次寫
3、RDBMS與HBase的對比
1、關(guān)系型數(shù)據(jù)庫
結(jié)構(gòu):
* 數(shù)據(jù)庫以表的形式存在
* 支持FAT、NTFS、EXT、文件系統(tǒng)
* 使用Commit log存儲日志
* 參考系統(tǒng)是坐標系統(tǒng)
* 使用主鍵(PK)
* 支持分區(qū)
* 使用行、列、單元格
功能:
* 支持向上擴展
* 使用SQL查詢
* 面向行,即每一行都是一個連續(xù)單元
* 數(shù)據(jù)總量依賴于服務(wù)器配置
* 具有ACID支持
* 適合結(jié)構(gòu)化數(shù)據(jù)
* 傳統(tǒng)關(guān)系型數(shù)據(jù)庫一般都是中心化的
* 支持事務(wù)
* 支持Join
2、HBase
結(jié)構(gòu):
* 數(shù)據(jù)庫以region的形式存在
* 支持HDFS文件系統(tǒng)
* 使用WAL(Write-Ahead Logs)存儲日志
* 參考系統(tǒng)是Zookeeper
* 使用行鍵(row key)
* 支持分片
* 使用行、列、列族和單元格
功能:
* 支持向外擴展
* 使用API和MapReduce來訪問HBase表數(shù)據(jù)
* 面向列,即每一列都是一個連續(xù)的單元
* 數(shù)據(jù)總量不依賴具體某臺機器,而取決于機器數(shù)量
* HBase不支持ACID(Atomicity、Consistency、Isolation、Durability)
* 適合結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)
* 一般都是分布式的
* HBase不支持事務(wù)
* 不支持Join
4、HBase特征簡要
1、自動故障處理和負載均衡
HBase運行在HDFS上,所以HBase中的數(shù)據(jù)以多副本形式存放,數(shù)據(jù)也服從分布式存放,數(shù)據(jù)的恢復也可以得到保障。另外,HMaster和RegionServer也是多副本的。
2、自動分區(qū)
HBase表是由分布在多個RegionServer中的region組成的,這些RegionServer又分布在不同的DataNode上,如果一個region增長到了一個閾值,為了負載均衡和減少IO,HBase可以自動或手動干預的將region切分為更小的region,也稱之為subregion。
3、集成Hadoop/HDFS
雖然HBase也可以運行在其他的分布式文件系統(tǒng)之上,但是與HDFS結(jié)合非常之方便,而且HDFS也非常之流行。
4、實時隨機大數(shù)據(jù)訪問
HBase采用log-structured merge-tree作為內(nèi)部數(shù)據(jù)存儲架構(gòu),這種架構(gòu)會周期性地將小文件合并成大文件以減少磁盤訪問同時減少NameNode壓力。
5、MapReduce
HBase內(nèi)建支持MapReduce框架,更加方便快速,并行的處理數(shù)據(jù)。
6、Java API
HBase提供原生的Java API支持,方便開發(fā)。
7、橫向擴展
HBase支持橫向擴展,這就意味著如果現(xiàn)有服務(wù)器硬件性能出現(xiàn)瓶頸,不需要停掉現(xiàn)有集群提升硬件配置,而只需要在現(xiàn)有的正在運行的集群中添加新的機器節(jié)點即可,而且新的RegionServer一旦建立完畢,集群會開始重新調(diào)整。
8、列存儲
HBase是面向列存儲的,每個列都單獨存儲,所以在HBase中列是連續(xù)存儲的,而行不是。
9、HBase Shell
HBase提供了交互式命令行工具可以進行創(chuàng)建表、添加數(shù)據(jù)、掃描數(shù)據(jù)、刪除數(shù)據(jù)等操作和其他一些管理命令。
5、HBase的基礎(chǔ)架構(gòu)

1、HMaster
功能:
1) 監(jiān)控RegionServer
2) 處理RegionServer故障轉(zhuǎn)移
3) 處理元數(shù)據(jù)的變更
4) 處理region的分配或移除
5) 在空閑時間進行數(shù)據(jù)的負載均衡
6) 通過Zookeeper發(fā)布自己的位置給客戶端
2、RegionServer
功能:
1) 負責存儲HBase的實際數(shù)據(jù)
2) 處理分配給它的Region
3) 刷新緩存到HDFS
4) 維護HLog
5) 執(zhí)行壓縮
6) 負責處理Region分片
組件:
1) Write-Ahead logs
HBase的修改記錄,當對HBase讀寫數(shù)據(jù)的時候,數(shù)據(jù)不是直接寫進磁盤,它會在內(nèi)存中保留一段時間(時間以及數(shù)據(jù)量閾值可以設(shè)定)。但把數(shù)據(jù)保存在內(nèi)存中可能有更高的概率引起數(shù)據(jù)丟失,為了解決這個問題,數(shù)據(jù)會先寫在一個叫做Write-Ahead logfile的文件中,然后再寫入內(nèi)存中。所以在系統(tǒng)出現(xiàn)故障的時候,數(shù)據(jù)可以通過這個日志文件重建。
2) HFile
這是在磁盤上保存原始數(shù)據(jù)的實際的物理文件,是實際的存儲文件。
3) Store
HFile存儲在Store中,一個Store對應(yīng)HBase表中的一個列族。
4) MemStore
顧名思義,就是內(nèi)存存儲,位于內(nèi)存中,用來保存當前的數(shù)據(jù)操作,所以當數(shù)據(jù)保存在WAL中之后,RegsionServer會在內(nèi)存中存儲鍵值對。
5) Region
Hbase表的分片,HBase表會根據(jù)RowKey值被切分成不同的region存儲在RegionServer中,在一個RegionServer中可以有多個不同的region。