全部產品
Search
文件中心

ApsaraDB for HBase:HBase SQL(Phoenix)FAQ

更新時間:Jul 06, 2024

本文檔介紹了您在使用HBase SQL(Phoenix)過程中遇到的常見問題並給出解決辦法。

ali-phoenix最新版本在Maven中央倉庫發布了哪些JAR包?

  • ali-phoenix 4.x發布包如下:
    GroupIdArtifactIdLatest Version
    com.aliyun.phoenixali-phoenix4.12.0-AliHBase-1.1-0.9
    com.aliyun.phoenixali-phoenix-hive4.12.0-AliHBase-1.1-0.9
    com.aliyun.phoenixali-phoenix-spark4.12.0-AliHBase-1.1-0.9
    com.aliyun.phoenixali-phoenix-pherf4.12.0-AliHBase-1.1-0.9
    com.aliyun.phoenixali-phoenix-queryserver4.12.0-AliHBase-1.1-0.9
    com.aliyun.phoenixali-phoenix-queryserver-client4.12.0-AliHBase-1.1-0.9
    com.aliyun.phoenixali-phoenix-pig4.12.0-AliHBase-1.1-0.9
    com.aliyun.phoenixali-phoenix-flume4.12.0-AliHBase-1.1-0.9
    com.aliyun.phoenixali-phoenix-core4.12.0-AliHBase-1.1-0.9
  • ali-phoenix 5.x發布包如下:
    GroupIdArtifactIdLatest Version
    com.aliyun.phoenixali-phoenix-shaded-thin-client5.2.5-HBase-2.x
    com.aliyun.phoenixali-phoenix-shaded-thin-client5.2.5-HBase-2.x
    說明 避免輕用戶端中包與業務三方包衝突,推薦使用輕用戶端shade包。

ali-phoenix JDBC URL格式是什麼樣的?

在啟用query-server的時候需要使用輕用戶端,否則使用重用戶端。ali-phoenix不支援以keytab的方式訪問雲HBase,所以此處和apache phoenix的JDBC格式有所差異。
  • 重用戶端DRIVEphoenix
    URL文法
      jdbc:phoenix:[[ZK_HOST1:port, ZK_HOST2:port, ZK_HOST3:port | comma-separated ZooKeeper Quorum [:port] [:hbase root znode] ]
    簡單URL樣本
    jdbc:phoenix:localhost   
    jdbc:phoenix:localhost:123:/hbase  
    jdbc:phoenix:v1,v2,v3:123:/hbase  
    jdbc:phoenix:v1:2181,v2:2181,v3:2181:/hbase  
    jdbc:phoenix:v1:2181,v2:2181,v3:2181
  • 輕用戶端DRIVE
    URL文法
    jdbc:phoenix:thin:[key=value[;key=value...]]
    簡單URL樣本
    jdbc:phoenix:thin:url=http://localhost:8765;serialization=PROTOBUF

是否支援QueryServer?

  • HBase1.x版本使用Phoenix4.x重用戶端模式,需要使用者自行搭建QueryServer服務。
  • HBase2.0版本增加HBase SQL服務,預設開啟QueryServer。

是否支援Tracing Web Application?

當前雲HBase上的ali-phoenix此不支援,此功能正在開發中。

構建同步的二級索引逾時怎麼辦?

HBase1.0上Phoenix4.x版本,需要在客戶加上如下配置,並重啟用戶端。
<property>    
     <name>hbase.rpc.timeout</name>    
     <value>60000000</value>
</property>
<property>    
     <name>hbase.client.scanner.timeout.period</name>    
     <value>60000000</value>
</property>
<property>    
        <name>phoenix.query.timeoutMs</name>   
        <value>60000000</value>
</property>
HBase2.0上Phoenix5.x版本,可在控制台參數管理中修改上述參數,並重啟HBase SQL服務,注意不需要重啟HBase,僅重啟HBase SQL服務(Phoenix)即可。
說明 Phoenix5.x叢集中調整逾時參數會對線上查詢造成影響,推薦採用重用戶端或者MR叢集構建索引,請參見構建索引

如何開通Namespace Mapping?

  • 4.x開通步驟
    1. 在用戶端增加以下配置。
      <property>    
           <name>hbase.rpc.timeout</name>    
           <value>60000000</value>
      </property>
      <property>    
           <name>hbase.client.scanner.timeout.period</name>    
           <value>60000000</value>
      </property>
      <property>    
              <name>phoenix.query.timeoutMs</name>   
              <value>60000000</value>
      </property>
    2. 找雲HBase 答疑開通Server端參數。
    3. 重啟HBase叢集。
  • 5.x開通步驟
    1. 登入控制台。
    2. 參數配置。

      phoenix.schema.isNamespaceMappingEnabledphoenix.schema.mapSystemTablesToNamespace 配置為 true

    3. 重啟 HBase 叢集。
    4. 重啟 SQL 服務。
    說明 這裡需要配置兩組相同的參數,參數描述是不相同的,一組是 query server,一組是 HBase server 端的,都需要設定。

是否支援串連池?

Phoenix4.x最新版本的4.12.0.X版本支援,具體參考PhoenixConnectionPool.java

Phoenix5.x版本基於輕用戶端實現,PhoenixConnectionPool.java不能使用,建議使用社區第三方串連池,比如mybatis,可參考相關參考

執行建立索引時間太長能否斷開用戶端連結?

不能斷開用戶端連結。執行create index主要有兩個步驟,第一步在server端同步源表資料到索引表, 第二步在用戶端發起請求修改索引表狀態設定為active。其中第一步一般是用戶端發起請求在server端完成後。

建立同步索引表,同步索引資料的速度怎麼樣?

一般情況下1000W資料建立索引需要5~20min, 具體情況視叢集配置和資源使用方式而定。

建立索引由於時間太長,用戶端斷開了連結怎麼辦?

一般情況下當前索引表的狀態是building狀態的(可以在sqlline中使用 !table命令查看),只有當索引表狀態變為active才算真正完成了索引構建。此時有兩種解決方案:
  1. 通過alter index命令rebuild索引。
  2. 刪除building狀態的索引表,配置更大的用戶端逾時時間,重新建立索引。

關係型資料庫怎麼匯入雲HBase的phoenix表中?

通過datax匯入,具體操作請參見樣本參考

查詢時發生遇到ERROR 599(42912): Default enable Force index, please set phoenix.force.index=false to disable it...., 應該怎麼處理?

為了避免查詢掃全表,會在SQL編譯階段,檢查查詢條件是否有主鍵或者索引列作為過濾條件,如果沒有會產生此異常。如果查詢確實需要非主鍵或非索引列作為過濾條件的列,phoenix4.x版本可以在用戶端的hbase-site.xml檔案中配置phoenix.force.indexfalse,重新開啟用戶端,即可生效。Phoenix5.x在控制台參數管理中修改phoenix.force.indexfalse,重啟HBase SQL服務即可。

通過springboot使用druid串連池報java.sql.SQLException: java.lang.IllegalArgumentException: Connection is null or closed應該怎麼處理?

由於Phoenix內部會緩衝連結,上層再使用一層串連池時,會出現部分連結被關閉的情況,所以目前不推薦使用此類方式。

使用python用戶端串連QueryServer時,串連閑置一段時間後再進行讀寫時報錯phoenixdb.errors.InternalError: ('', None, None, None)

由於開源python用戶端未實現串連空閑逾時重建機制,通過SLB負載平衡連線逾時後再次請求發送到其他QueryServer節點導致。
  1. 下載阿里phoenix-python用戶端,單擊下載
  2. 如果已安裝phoenix-python驅動,需要執行如下命令進行刪除。
    rm -rf /usr/lib/python${version}/site-packages/phoenixdb*
  3. 解壓後在phoenixdb目錄執行如下命令安裝驅動。
    python setup.py install

Phoenix是否支援多租戶?

暫不支援,包括grantrevoke命令。