對比使用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可以提供源碼進行實踐!!!