對比使用Phoenix組件和原生Hbase查詢的時間性能
- 2019 年 10 月 6 日
- 筆記
對比使用Phoenix組件和原生Hbase查詢的時間性能
之前對於使用Phoenix查詢Hbase大表數據一直卡死,於是擱置了好久,昨晚終於嘗試了一下,完美搞定,本節文章來使用4種方法對比Hbase查詢性能。
查詢數據量為1.8億+。
1.基本理論
HBase是一個分散式的基於列存儲的非關係型資料庫。
HBase不是關係型資料庫,而是一個在hdfs上開發的面向列的分散式資料庫,不支援sql。
HBase統計使用count。查詢按照rowkey查詢,適合存儲結果,不適合做sum、count、表連接等複雜查詢,而SQL則適合多表連接,查詢組合等。
現有工具有很多Hive,Tez,Impala,Shark/Spark,Phoenix等。今天主要記錄Phoenix。
phoenix,由saleforce.com開源的一個項目,後又捐給了Apache。它相當於一個Java中間件,幫助開發者,像使用jdbc訪問關係型資料庫一些,訪問NoSql資料庫HBase。
phoenix,操作的表及數據,存儲在hbase上。phoenix只是需要和Hbase進行表關聯起來。然後再用工具進行一些讀或寫操作。
其實,可以把Phoenix只看成一種代替HBase的語法的一個工具。
2.查詢方式
第一種:原生Hbase查詢時間
count 'mysql_data'

Hbase查詢時間為3856秒大約1小時7分鐘
第二種:Hbase查詢優化
count 'mysql_data', INTERVAL => 10000000
每隔一千萬查詢一次:

間隔查詢3372.5740秒,大約耗時:56分鐘。
第三種:協處理器
首先需要配置:hbase-site.xml
<property> <name>hbase.coprocessor.user.region.classes</name> <value>org.apache.hadoop.hbase.coprocessor.AggregateImplementation</value> </property>

耗時:1874188毫秒=1874.188s秒,大約31分鐘。
第四種:Phoenix查詢時間
需要設置Phoenix中的hbase-site.xml時間配置:
<property> <name>phoenix.query.timeoutMs</name> <value>3600000</value> </property> <property> <name>hbase.rpc.timeout</name> <value>3600000</value> </property> <property> <name>hbase.client.scanner.timeout.period</name> <value>3600000</value> </property>

Phoenix查詢時間為2015.033秒,大約33分鐘左右。
3.總結
綜上可得出,速度快慢:協處理器>Phoenix查詢>間隔count>普通count>全表scan。
最後,歡迎大家訂閱我的chat,更多細節會在chat中分享,本節chat可以提供源碼進行實踐!!!