1、HBase相關概念數組
HFile是HBase專用的HDFS文件格式。域服務器中的HFile實現負責從HDFS讀取HFile,以及將HFile寫入到HDFS。緩存
分佈式的HBase實例依賴於處在運行狀態的Zookeeper集羣。安全
默認狀況下,HBase管理一個Zookeeper集羣(HBase將Zookeeper進程的啓動和中止做爲啓動/中止自身進程的一部分。)服務器
因爲HBase主控節點可能會被從新分配,所以客戶端啓動時會向Zookeeper查詢HBase主控節點和-Root-表的當前位置。網絡
HBase使用一種自動分片和分發方案來應對大量數據。(與HDFS基於塊的設計和快速數據訪問相比)多線程
HBase數據的全部組件--鍵、列族名和改名--均被其當成求解析的字節數組。這意味着全部內部值的比較及排序,均以字典順序進行。異步
HBase使用列族進行基於訪問模式的數據分割。定義了保存和訪問HBase數據的方式。每一個列族都保存在一個單獨的HFILE中。分佈式
建議爲每種數據訪問類型建立一個列族(即應該把一般一塊兒讀/寫的數據放入相同的列族)。性能
在表建立過程當中會定義一系列列族(能夠修改)。不一樣的列族也可使用不一樣的壓縮機制。測試
HBase中能夠設置多個列族,每一個列族能夠有多個qualifier,至關於不一樣的列。
每一個列與鍵的對應值的更新,就是新版本的寫入。默認狀況下,HBase爲給定列的值保存最近3個版本(自動刪除更老的版本)。版本深度能夠在建表時設定,版本的默認實現是數據插入的時間戳,但能夠設定其它方式。
Delete刪除,HBase不會就地修改數據,而是建立墓碑標識來完,在主要合併的時,這些值才被清理掉
處理數據時,能夠爲Get和Scan配置過濾器
HBase使用HDFS做爲持久化機制,所以它從不覆蓋數據(HDFS不支持更新),因此每次memstore寫入磁盤時,它並不覆蓋已有的存儲文件,而是建立新文件。爲避免存儲文件過多,HBase實現了一個稱爲合併的處理過程。
次要合併:收集多個較小的相鄰存儲文件並將它們重寫爲一個。次要合併不會刪除已執行Delete操做或已通過期的數據單元,只有主要合併纔會。
主要合併:主要合併運行以後,每一個存儲上將只有一個存儲文件,一般會提高性能。合併不會實現域合併。
HBase使用了布隆過濾器,容許進行行或行/列級別的檢查,這種過濾在鍵較稀疏時頗有用,布隆過濾器在文件持久化時生成,並保存在每一個文件的尾部。
2、HBase結構設計
一、通常性原則,將每一個表的列族數限定爲不超過10-15(HBase將每一個列族保存在獨立文件中,所以大量的列族會致使須要讀取和合並多個文件)
列族名會顯式地與每一個列名保存在一塊兒(eg:info:name),所以應該最小化列族的大小。若是列中數據量小的話,一般推薦用單個字母名字,否則列族名就佔了很大的空間了,損失了有效空間利用率。
二、Htable的實現是單線程的。若是須要多線程的訪問HBase,那麼每一個線程必須建立本身的HTable類實例。解決辦法使用HTalbePool類
三、Scan對象,掃描的起始鍵與結束鍵,起始鍵是包含在掃描範圍內的,而結束鍵沒有
四、可使用Get,多重Get(Get的列表),Scan實現讀操做。
五、scan.setCatching(HBASECASHING) (其中HBASECASHING指定須要緩存的行數),設置緩存值能夠提高性能,緩存的大小顯著依賴於對數據進行的處理。
(指數據處理的預讀到緩存裏吧,即在上一批數據處理完成以前,預讀下一批數據,當處理數據耗時較多時,可能出現超時異常,eg:UnkonwnScannerException)
六、過濾器並不會提高性能,由於對錶的掃描它會讀取每條記錄,並測試是否知足過濾條件,返回給客戶端那些知足過濾條件的數據,有助於提升網絡利用率。
七、全部對管理功能的訪問均經過HBaseAdmin類完成,它提供普遍的API,檢查表是否存在且啓用,再到建立和刪除表。
還能夠基於HTableDescriptor建立表,該類容許操做特定表的參數,包括表名、最大文件尺寸等。它還包含了一個HCloumnDescriptor類的列表,其中每一個HCloumnDescriptor類對應一個列族,容許設定列族參數名稱、最大版本數、布隆過濾器。
八、因爲表的分裂是至關昂貴的操做,因此在預先知道鍵數量的狀況下,HBaseAdmin類容許使用方法建立預分裂表。
admin.createTable(desc,splitKeys);
admin.createTable(desc,startkey,endkey,nregions);
第一個方法須要表描述符和鍵的字節數組,其中每一個鍵指定域的起始鍵。
第二個方法須要表描述符、起始鍵和結束鍵以及域的數量。
九、HBase自有客戶端:HTable
StumbleUpon公司另一種HBase Api實現:異步HBase,其核心是HBaseClient,不只線程安全還支持任何HBase表的訪問(與之相比較的HTable,每一個實例僅僅支持一個表)
該實現容許以徹底異步/非阻塞的方式訪問HBase,對於Put操做明顯的提升了吞吐量
3、比較
一、HDFS能夠用於保存基本上是順序訪問的海量數據,而HBase的主要優點是快速訪問數據。但兩者沒有一個能獨立解決一個常見的業務問題--快速訪問大的(MB或GB大小)數據條目。這種狀況通常是在HBase中存儲元數據,在HDFS中存儲文件。