HBase

HBase

分布式的、面向列的開源數據庫
HBase是一個分布式的、面向列的開源數據庫,該技術來源于 Fay Chang 所撰寫的Google論文“Bigtable:一個結構化數據的分布式存儲系統”。就像Bigtable利用了Google文件系統(File System)所提供的分布式數據存儲一樣,HBase在Hadoop之上提供了類似于Bigtable的能力。[1]HBase是Apache的Hadoop項目的子項目。HBase不同于一般的關系數據庫,它是一個适合于非結構化數據存儲的數據庫。另一個不同的是HBase基于列的而不是基于行的模式。
    中文名:開源數據庫 外文名:HBase 适用領域: 所屬學科:

結構介紹

HBase – Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集群。

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

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

訪問接口

1. Native Java API,最常規和高效的訪問方式,适合Hadoop MapReduce Job并行批處理HBase表數據

2. HBase Shell,HBase的命令行工具,最簡單的接口,适合HBase管理使用

3. Thrift Gateway,利用Thrift序列化技術,支持C++,PHP,Python等多種語言,适合其他異構系統在線訪問HBase表數據

4. REST Gateway,支持REST 風格的Http API訪問HBase, 解除了語言限制

5. Pig,可以使用Pig Latin流式編程語言來操作HBase中的數據,和Hive類似,本質最終也是編譯成MapReduce Job來處理HBase表數據,适合做數據統計

6. Hive,當前Hive的Release版本尚沒有加入對HBase的支持,但在下一個版本Hive 0.7.0中将會支持HBase,可以使用類似SQL語言來訪問HBase

Client訪問用戶數據之前需要首先訪問zookeeper,然後訪問-ROOT-表,接着訪問.META.表,最後才能找到用戶數據的位置去訪問,中間需要多次網絡操作,不過client端會做cache緩存。HBase Table和Region的關系,比較類似HDFS File和Block的關系,HBase提供了配套的TableInputFormat和TableOutputFormat API,可以方便的将HBase Table作為Hadoop MapReduce的Source和Sink,對于MapReduce Job應用開發人員來說,基本不需要關注HBase系統自身的細節。

HBase Client使用HBase的RPC機制與HMaster和HRegionServer進行通信,對于管理類操作,Client與HMaster進行RPC;對于數據讀寫類操作,Client與HRegionServer進行RPC,Zookeeper Quorum中除了存儲了-ROOT-表的地址和HMaster的地址,也會把自己以Ephemeral方式注冊到Zookeeper中,使得HMaster可以随時感知到各個HRegionServer的健康狀态。

HStore存儲是HBase存儲的核心了,其中由兩部分組成,一部分是MemStore,一部分是StoreFiles。MemStore是Sorted ,用戶寫入的數據首先會放入MemStore,當MemStore滿了以後會Flush成一個StoreFile(底層實現是HFile),當StoreFile文件數量增長到一定阈值,會觸發Compact合并操作,将多個StoreFiles合并成一個StoreFile,合并過程中會進行版本合并和數據删除,因此可以看出HBase其實隻有增加數據,所有的更新和删除操作都是在後續的compact過程中進行的,這使得用戶的寫操作隻要進入内存中就可以立即返回,保證了HBase I/O的高性能。

當StoreFiles Compact後,會逐步形成越來越大的StoreFile,當單個StoreFile大小超過一定阈值後,會觸發Split操作,同時把當前Region Split成2個Region,父Region會下線,新Split出的2個孩子Region會被HMaster分配到相應的HRegionServer上,使得原先1個Region的壓力得以分流到2個Region上。每個HRegionServer中都有一個HLog對象,HLog是一個實現Write Ahead Log的類,在每次用戶操作寫入MemStore的同時,也會寫一份數據到HLog文件中(HLog文件格式見後續),HLog文件定期會滾動出新的,并删除舊的文件(已持久化到StoreFile中的數據)。

當HRegionServer意外終止後,HMaster會通過Zookeeper感知到,HMaster首先會處理遺留的 HLog文件,将其中不同Region的Log數據進行拆分,分别放到相應region的目錄下,然後再将失效的region重新分配,領取到這些region的HRegionServer在Load Region的過程中,會發現有曆史HLog需要處理,因此會Replay HLog中的數據到MemStore中,然後flush到StoreFiles,完成數據恢複。

上一篇:抽象工廠模式

下一篇:XMPP

相關詞條

相關搜索

其它詞條