Phoenix性能優化


目錄:

  1、建表優化

  2、二級索引

  3、並行處理

 

1.建表優化

  1. Salting 翻譯成中文是加鹽的意思,本質是在hbase的rowkey的byte數組的第一個字節位置設定一個系統生成的byte值, 這個byte值是由主鍵生成rowkey的byte數組做一個哈希算法,計算得來的。Salting之后可以把數據分布到不同的region上,這樣有利於phoenix並發的讀寫操作。 示例:CREATE TABLE TEST (HOST VARCHAR NOT NULL PRIMARY KEY, DESCRIPTION VARCHAR) SALT_BUCKETS=16
  2. Pre-split 這個就是HBase的預分區了,在建phoenix表時,可以精確的指定要根據什么值來做預分區 示例: CREATE TABLE TEST (HOST VARCHAR NOT NULL PRIMARY KEY, DESCRIPTION VARCHAR) SPLIT ON ('CS','EU','NA')
  3. 使用多個列族,在創建phoenix表是可以指定列所在的列族 示例: CREATE TABLE TEST (MYKEY VARCHAR NOT NULL PRIMARY KEY, A.COL1 VARCHAR, A.COL2 VARCHAR, B.COL3 VARCHAR)
  4. 在數據量大的表上使用壓縮算法來提高性能 GZ,lzo等 示例: CREATE TABLE TEST (HOST VARCHAR NOT NULL PRIMARY KEY, DESCRIPTION VARCHAR) COMPRESSION='GZ'

2.二級索引

     Phoenix的二級索引從2.1版本開始支持可變和不可變(數據插入之后不可更新)數據了,之前的版本只支持不可變的數據,我們現在使用的版本是2.2.2是支持二級索引的,我們可以做一些嘗試。

     可以通過explain select … 來看phoniex在執行sql時是否用上了二級索引。

3.並行

     Phoenix會將一個聚合查詢分成多個Scan,然后將這些Scan分配給phoenix自定義的hbase協處理器,這些協處理器可以在服務器端並行執行來提高查詢性能。平衡的拆分表是Phoenix獲得高效查詢的最重要因素之一,這包括將相等大小的分區平均分配到不同的region server上。這個工具http://www.sentric.ch/blog/hbase-split-visualisation-introducing-hannibal 可以幫助我們監控hbase表分區的情況。表中的數據在各個region sever上均勻分布可以保證每一個phoenix線程處理的數據量相當,這樣就可以減少查詢的等待時間。

   在客戶端可以通過phoenix.query.targetConcurrency 和 phoenix.query.maxConcurrency 來控制查詢如何來拆分掃描。並行查詢最好可以將查詢scan的切分和表數據的region切分對齊。如果掃描很不均勻,就需要用多個線程來處理數據量較大的分區掃描。

    並行執行掃描時的切分點定義如下,我們假設:
     t 是目標的並發數
     m 是最大的並發數
     r 是我們要掃描的分區數

if r >= t 使用表的region邊界 Else if r/2 > t 將每個region都拆分成s份,s滿足公式: s = max(x) x滿足 s * x < m Else 將每個region拆分成s份,s滿足公式:s = max(x) x滿足 s * x < t

    可以根據客戶端機器的內核數和集群的大小,來調大phoenix.query.threadPoolSize, phoenix.query.queueSize, phoenix.query.maxConcurrency, 和 phoenix.query.targetConcurrency的值,允許更多的線程做並行的查詢,來降低延遲。

    但是這個方法也並非沒有限制,最大的問題是phoenix沒有足夠的信息來拆分region。 如果查詢結果跨越很多region,這沒有問題,因為region中總會有一些大小相差不多的region,然而如果查詢僅僅涉及到少數幾個region,可能就會有問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM