要實現操作hbase資料表首先要了解它的原理:
第一部分:hbase原理篇
hbase就是基於hadoop的乙個開源專案,也是對google的bigtable的一種實現。
bigtable最淺顯來看就是一張很大的表,表的屬性可以根據需求去動態增加,但是又沒有表與表之間關聯查詢的需求。
bigtable是google為分布儲存和管理內部大規模結構化資料而設計的分布式資料庫系統,是google雲 基礎架構組成之一,具有良好的可擴充套件性,可在上千臺廉價伺服器上儲存petabyte級別的資料。它不提供完整的關係資料模型,只提供簡單的資料模型,這使得客戶端可以動態控制資料的布局和格式。
bigtable就是張大表,這張表其實和我們想象的傳統資料庫的表還是有些差別的。這個表是乙個稀疏的多維度對映表,排序後分布式地永久儲存在硬碟上。這張對映表以行關鍵字、列關鍵字和時間戳作為索引,每個值是乙個未作解釋的位元組陣列。行關鍵字可以是任意字串,在行關鍵字下的每個讀寫操作都是原子性的,不管讀寫行中有多少不同的列。bigtable通過行關鍵字的字典序來維護資料,一張錶可動態劃分成多個連續行,連續行稱為tablet,它是資料分布和負載均衡的基本單位。bigtable把列關鍵字分成組,每組為乙個列族,列族是bigtable的基本訪問控制單元。通常,同一列族下存放的資料具有相同的型別。在建立列關鍵字存放資料之前,必須先建立列族。在一張表中列族的數量不能太多,列的數量則不受限制。bigtable表項可以儲存不同版本的內容,用時間戳來索引,按時間戳倒序排列。
bigtable非常適合於存放鬆散資料,鬆散資料可以說是介於map entry(key & 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都有很多選擇,對於傳統的關係型資料,從mysql到oracle都給了很好的支援,唯有鬆散資料這類資料,採用前後兩種解決方案都不能最大化它的處理能力。因此bigtable才有了它用武之地。
hbase作為apache的開源專案,也是出於起步階段,因為其實它所依賴的hadoop也不能說已經到了成熟階段,所以都有很大的發展空間,這也為我們這些開源愛好者提供了更多空間去貢獻。這裡主要會談到hbase的框架設計方面的知識和它的一些特點,不論是否採用hbase去解決工作中的問題,一種好的流程設計總會給開發者和架構設計者帶來一些思想上的火花。
hbase中的每一張表,就是所謂的bigtable。bigtable會儲存一系列的行記錄,行記錄有三個基本型別的定義:row key,time stamp,column。row key是行在bigtable中的唯一標識,time stamp是每次資料操作對應關聯的時間戳,可以看作類似於svn的版本,column定義為::,通過這兩部分可以唯一的指定乙個資料的儲存列,family的定義和修改需要對hbase作類似於db的ddl操作,而對於label的使用,則不需要定義直接可以使用,這也為動態定製列提供了一種手段。family另乙個作用其實在於物理儲存優化讀寫操作,同family的資料物理上儲存的會比較臨近,因此在業務設計的過程中可以利用這個特性。
2、連線hbase的常見介面
連線hbase主要使用了hbase以下幾個重要概念:
ø
hbaseconfiguration: 用於告訴client如何連線,連線到哪個hbase的伺服器上。
ø
htable:代表乙個hbase**。
ø
batchupdate:用於**中一行的更新。包括新增某個列,修改某列的值,刪除某列等。
ø
commit:table的乙個方法。代表某個batchupdate操作可以生效了。類似於資料庫中的commit操作。
ø
cell:table中對應某個(行key, 列值,時間戳)下的單元格值。
ø 獲取cell的方法。for example: table.get("myrow", "mycolumnfamily:columnqualifier1");
ø
scanner:用於遍歷**。
ø
rowresult:遍歷過程當中儲存某行資訊。
我們在程式中連線並使用hbase表時,所需要做的一些step如下:
ø
首先,我們使用hbaseconfiguration來獲取表的基本資訊
ø
接著,我們通過htable定義好我們需要連線表的表名
ø
然後,我們通過表的row與column來訪問表,對應於不同的操作目的有不同的方法:如batchupdate、scanner、rowresult等
3、hbase操作示例(待續)
hbase分頁功能的幾種實現方案
hbase分頁功能的幾種實現方案。分頁功能是線上系統的常用功能,對hbase,有以下幾個方案可以選擇 拋磚引玉 假設要查第n頁,1頁大小為m 1 client分頁,scan查到n m條,過濾掉n m m條,返回m條。對於m,n較小時比較適合。2 自定義filter,該filter可以傳遞offset...
HBase之功能細節
注 tablet等同與hbase中的region 圖釋說明 1 metadatatable metadatatable是系統預定義的table,當使用者自定義 被拆分成多個tablet之後,metadata table用來儲存這些tablet的位址,在目錄層級中處於第3層 2 root tablet...
HBase的Snapshots功能介紹
introduction to apache hbase snapshots 對照。在之前,備份或者拷貝乙個表只能用copy export表,或者disable表後,從hdfs中拷貝出所有hfile。copy export錶用的是mapreduce來scan和copy表,這會對region serv...