HBase應用方案
HBase實際應用中的效能優化方法
行鍵(Row Key)
行鍵是按照字典序儲存,因此,設計行鍵時,要充分利用這個排序特點,將經常一起讀取的資料儲存到一塊,將最近可能會被訪問的資料放在一塊。
InMemory
建立表的時候,可以通過HColumnDescriptor.setInMemory(true)將表放到Region伺服器的快取中,保證在讀取的時候被cache命中。
Max Version
建立表的時候,可以通過HColumnDescriptor.setMaxVersions(int maxVersions)設定表中資料的最大版本,如果只需要儲存最新版本的資料,那麼可以設定setMaxVersions(1)。
Time To Live
建立表的時候,可以通過HColumnDescriptor.setTimeToLive(int timeToLive)設定表中資料的儲存生命期,過期資料將自動被刪除,如果只需要儲存最近兩天的資料,那麼可以設定setTimeToLive(2 * 24 * 60 * 60)。
HBase效能監視
Master-status(自帶):HBase Master預設基於Web的UI服務埠為60010,HBase region伺服器預設基於Web的UI服務埠為60030.如果master執行在名為master.foo.com的主機中,mater的主頁地址就是http://master.foo.com:60010,使用者可以通過Web瀏覽器輸入這個地址檢視該頁面;可以檢視HBase叢集的當前狀態。
Ganglia:是UC Berkeley發起的一個開源叢集監視專案,用於監控系統性能。
OpenTSDB:從大規模的叢集(包括叢集中的網路裝置、作業系統、應用程式)中獲取相應的metrics並進行儲存、索引以及服務,從而使得這些資料更容易讓人理解,如web化,圖形化等。
Ambari:建立、管理、監視 Hadoop 的叢集。
在HBase之上構建SQL引擎
NoSQL區別於關係型資料庫的一點就是NoSQL不使用SQL作為查詢語言,那麼為何在NoSQL資料儲存HBase上提供SQL介面?1.易使用。SQL易於理解,能夠更加輕鬆地使用HBase。2.減少編碼。使用SQL這樣更高層次的語言來編寫,減少了編寫的程式碼量。
方案:
1.Hive整合HBase
Hive與HBase的整合功能利用兩者對外的API介面互相通訊,通訊主要依靠hive_hbase-handler.jar工具包(Hive Storage Handlers)。由於HBase並不是每個版本的Hive都能和現有的HBase版本進行整合,在使用過程中要特別注意兩者版本的一致性。
2.Phoenix
Phoenix由Salesforce.com開源,是構建在Apache HBase之上的一個SQL中間層,可以讓開發者在HBase上執行SQL查詢。
構建HBase二級索引
HBase只有一個針對行健的索引,訪問HBase表中的行,只有三種方式:通過單個行健訪問;通過一個行健的區間來訪問;全表掃描。
使用其他產品為HBase行健提供索引功能:原理:採用HBase0.92版本之後引入的Coprocessor特性
Coprocessor構建二級索引;Coprocessor提供了兩個實現:endpoint和observer,endpoint相當於關係型資料庫的儲存過程,而observer則相當於觸發器。observer允許我們在記錄put前後做一些處理,因此我們可以在插入資料時同步寫入索引表。
優點:非侵入性:引擎構建在HBase之上,既沒有對HBase進行任何改動,也不需要上層應用做任何妥協
缺點:每插入一條資料需要向索引表插入資料,即耗時是雙倍的,對HBase的叢集的壓力也是雙倍的
Hindex二級索引
Hindex 是華為公司開發的純 Java 編寫的HBase二級索引,相容 Apache HBase 0.94.8。當前的特性如下:多個表索引;多個列索引;基於部分列值的索引。
HBase+Redis
Coprocessor構建二級索引;Redis做客戶端快取;將索引實時更新到Redis等KV系統中,定時從KV更新索引到HBase的索引表中。
HBase+solr
Solr是一個高效能、Java5開發、基於Lucene的全文搜尋伺服器。同時對其進行了擴充套件,提供了比Lucene更為豐富的查詢語言,同時實現了可配置、可擴充套件並對查詢效能進行了優化,並且提供了一個完善的功能管理介面,是一款非常優秀的全文搜尋引擎。