HBase功能實現

要實現操作hbase數據表首先要了解它的原理:

 

第一部分:Hbase原理篇

 

HBASE就是基於Hadoop的一個開源項目,也是對GoogleBigTable的一種實現。

BigTable最淺顯來看就是一張很大的表,表的屬性可以根據需求去動態增加,但是又沒有表與表之間關聯查詢的需求。

BigTableGoogle爲分佈存儲和管理內部大規模結構化數據而設計的分佈式數據庫系統,是Google雲 基礎架構組成之一,具有良好的可擴展性,可在上千臺廉價服務器上存儲petabyte級別的數據。它不提供完整的關係數據模型,只提供簡單的數據模型,這使得客戶端可以動態控制數據的佈局和格式。

BigTable就是張大表,這張表其實和我們想象的傳統數據庫的表還是有些差別的。這個表是一個稀疏的多維度映射表,排序後分佈式地永久存儲在硬盤上。這張映射表以行關鍵字、列關鍵字和時間戳作爲索引,每個值是一個未作解釋的字節數組。行關鍵字可以是任意字符串,在行關鍵字下的每個讀寫操作都是原子性的,不管讀寫行中有多少不同的列。BigTable通過行關鍵字的字典序來維護數據,一張表可動態劃分成多個連續行,連續行稱爲Tablet,它是數據分佈和負載均衡的基本單位。BigTable把列關鍵字分成組,每組爲一個列族,列族是BigTable的基本訪問控制單元。通常,同一列族下存放的數據具有相同的類型。在創建列關鍵字存放數據之前,必須先創建列族。在一張表中列族的數量不能太多,列的數量則不受限制。BigTable表項可以存儲不同版本的內容,用時間戳來索引,按時間戳倒序排列。

BigTable非常適合於存放鬆散數據,鬆散數據可以說是介於Map Entrykey & value)和DB Row之間的一種數據。在使用Memcache的時候,有時候的需求是需要存儲的不僅僅是簡單的一個key對應一個value,可能需要類似於數據庫表結構中多屬性的存儲,但是又不會像傳統數據庫表結構中那樣,需要那麼多關聯關係,其實這類數據就是所謂的鬆散數據。

Google雲計算基礎架構裏,BigTable並不是孤立的,它建立在其他數個Google框架上。BigTable使用GFS來存儲日誌和數據文件;與其它分佈式應用共享機器集羣;依賴集羣管理系統來調度任務、管理資源、處理失效機器、監視機器狀態等。BigTable採用Google SSTable格式存儲數據,SSTable提供永久存儲的、有序的、不可改寫的關鍵字到值的映射,以及相應的查詢操作。在SSTable尾部包含一個塊索引,用來定位數據。此外,BigTable還使用Google分佈式鎖服務Chubby來解決一系列問題,如:保證任何時間最多隻有一個活躍的主備份;存儲BigTable數據的啓動位置;發現Tablet服務器;存儲BigTable模式信息、存儲訪問權限等。

互聯網應用有一個最大的特點,就是速度,功能再強大,速度慢,還是會被捨棄。因此在大訪問量的網站都採取前後的緩存來提升性能和響應時間。對於Map Entry類型的數據,集中式分佈式Cache都有很多選擇,對於傳統的關係型數據,從MySQLOracle都給了很好的支持,唯有鬆散數據這類數據,採用前後兩種解決方案都不能最大化它的處理能力。因此BigTable纔有了它用武之地。

HBASE作爲Apache的開源項目,也是出於起步階段,因爲其實它所依賴的Hadoop也不能說已經到了成熟階段,所以都有很大的發展空間,這也爲我們這些開源愛好者提供了更多空間去貢獻。這裏主要會談到HBASE的框架設計方面的知識和它的一些特點,不論是否採用HBASE去解決工作中的問題,一種好的流程設計總會給開發者和架構設計者帶來一些思想上的火花。

 

 

HBASE中的每一張表,就是所謂的BigTableBigTable會存儲一系列的行記錄,行記錄有三個基本類型的定義:Row Key,Time Stamp,ColumnRow Key是行在BigTable中的唯一標識,Time Stamp是每次數據操作對應關聯的時間戳,可以看作類似於SVN的版本,Column定義爲:<family>:<label>,通過這兩部分可以唯一的指定一個數據的存儲列,family的定義和修改需要對HBASE作類似於DBDDL操作,而對於label的使用,則不需要定義直接可以使用,這也爲動態定製列提供了一種手段。family另一個作用其實在於物理存儲優化讀寫操作,同family的數據物理上保存的會比較臨近,因此在業務設計的過程中可以利用這個特性。

 

 

 

 

 

2、連接hbase的常見接口

連接HBase主要使用了HBase以下幾個重要概念:

Ø    HBaseConfiguration: 用於告訴client如何連接,連接到哪個HBase的服務器上。

Ø    HTable:代表一個HBase表格。

Ø    BatchUpdate:用於表格中一行的更新。包括添加某個列,修改某列的值,刪除某列等。

Ø    committable的一個方法。代表某個BatchUpdate操作可以生效了。類似於數據庫中的commit操作。

Ø    Celltable中對應某個(行key, 列值,時間戳)下的單元格值。

Ø    獲取Cell的方法。For example: table.get("myRow", "myColumnFamily:columnQualifier1");

Ø    scanner:用於遍歷表格。

Ø    rowResult:遍歷過程當中保存某行信息。

 

我們在程序中連接並使用Hbase表時,所需要做的一些step如下:

Ø    首先,我們使用HBaseConfiguration來獲取表的基本信息

Ø    接着,我們通過HTable定義好我們需要連接表的表名

Ø    然後,我們通過表的rowcolumn來訪問表,對應於不同的操作目的有不同的方法:如BatchUpdatescannerrowResult

 

 

3、HBase操作示例(待續)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章