すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB for HBase:HBase SQL(Phoenix)に関するFAQ

最終更新日:Jan 16, 2025

このトピックでは、HBase SQL (Phoenix) の使用方法に関するよくある質問への回答を提供します。

Maven中央リポジトリのali-phoenixの最新バージョンでは、どのJARパッケージがリリースされていますか?

  • ali-phoenix 4.xの依存関係:
    GroupIdArtifactId最新バージョン
    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の依存関係:
    GroupIdArtifactId最新バージョン
    com.aliyun.phoenixali-phoenix-shaded-thin-client5.2.5-HBase-2.x
    com.aliyun.phoenixali-phoenix-shaded-thin-client5.2.5-HBase-2.x
    説明 クライアントとサードパーティの依存関係間で発生する可能性のある非互換性の問題を回避するために、シェーディングクライアントを使用することをお勧めします。

ali-phoenix JDBC接続文字列の形式は何ですか?

Query Serverが有効になっている場合は、シン クライアントを使用する必要があります。それ以外の場合は、シッククライアントを使用します。 ali-phoenixでは、keytabを使用してApsaraDB for HBaseにアクセスすることはできません。そのため、ali-phoenixのJDBC接続文字列は、Apache PhoenixのJDBC接続文字列とは異なります。
  • シッククライアントドライバー
    [接続文字列の構文]
      jdbc:phoenix:[[ZK_HOST1:port, ZK_HOST2:port, ZK_HOST3:port | comma-separated ZooKeeper Quorum [:port] [:hbase root znode] ]
    [接続文字列の例]
    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
  • シン クライアントドライバー
    [接続文字列の構文]
    jdbc:phoenix:thin:[key=value[;key=value...]]
    [接続文字列の例]
    jdbc:phoenix:thin:url=http://localhost:8765;serialization=PROTOBUF

ApsaraDB for HBaseはQuery Serverをサポートしていますか?

  • ApsaraDB for HBase 1.xは、Phoenix 4.xシッククライアントを使用します。 Query Serverサービスを手動で作成する必要があります。
  • ApsaraDB for HBase 2.0は、HBase SQLサービスをサポートしています。デフォルトでは、ApsaraDB for HBase 2.0でQuery Serverが有効になっています。

Webアプリケーションをトレースできますか?

いいえ、ApsaraDB for HBaseのali-phoenixはWebアプリケーションのトレースをサポートしていません。この機能は近日中に利用可能になります。

同期タスクの作成時にセカンダリインデックスがタイムアウトした場合はどうすればよいですか?

ApsaraDB for HBase 1.0のPhoenix 4.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>
ApsaraDB for HBase 2.0のPhoenix 5.xの場合は、ApsaraDB for HBaseコンソールで上記のパラメーターを変更してから、HBase SQLサービスを再起動します。 HBaseを再起動する必要はありません。
説明 Phoenix 5.xクラスターでタイムアウトパラメーターを調整すると、オンラインアクセスに影響します。シッククライアントまたはMapReduceクラスターを使用してインデックスを作成することをお勧めします。詳細については、「ApsaraDB Phoenixでインデックスを作成するためのベストプラクティス」をご参照ください。

名前空間マッピングを有効にするにはどうすればよいですか?

  • ali-phoenix 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. ApsaraDB for HBase Q&Aグループに連絡して、HBaseサーバーでこの機能を有効にします。
    3. HBaseクラスターを再起動します。
  • ali-phoenix 5.xの名前空間マッピングを有効にします。
    1. ApsaraDB for HBaseコンソールにログインします。
    2. パラメーターを設定します。

      phoenix.schema.isNamespaceMappingEnabled パラメーターと phoenix.schema.mapSystemTablesToNamespace パラメーターを true に設定します。

    3. HBaseクラスターを再起動します。
    4. HBase SQLサービスを再起動します。
    説明 query serverHBase server の両方でこれらのパラメーターを設定する必要があります。 2つのサーバーでのパラメーターの説明が異なることに注意してください。

接続プールはサポートされていますか?

場合によります。Phoenix 4.12.0.X は接続プールをサポートしています。詳細については、PhoenixConnectionPool.java を参照してください。

Phoenix 5.xはシン クライアントを使用します。 PhoenixConnectionPool.java を使用して接続プールを作成することはできません。MyBatisなどのサードパーティの接続プールを使用することをお勧めします。詳細については、「接続プールのデモ」をご参照ください。

インデックスの作成に時間がかかりすぎる場合、クライアントを切断できますか?

いいえ、クライアントを切断しないでください。インデックスを作成する手順は2つのステップで構成されます。ステップ1では、サーバーはソーステーブルからインデックステーブルにデータを同期します。ステップ2では、クライアントはインデックステーブルの状態をアクティブに変更するリクエストを送信します。通常、ステップ1では、クライアントはサーバーにリクエストを送信し、サーバーがリクエストを処理します。

インデックステーブルの作成とインデックスデータの同期にはどれくらいの時間がかかりますか?

ほとんどの場合、1,000万行のデータにインデックスを作成するには5~20分かかります。必要な時間は、クラスターの仕様と計算リソースの数によって異なります。

インデックスの作成に時間がかかりすぎて、クライアント接続が自動的に閉じられた場合はどうすればよいですか?

インデックステーブルは、状態がbuildingからactiveに変化した後にのみ作成されます。 SQLLineで!tableコマンドを実行して、インデックステーブルの状態をクエリできます。この問題を解決するには、次のいずれかの解決策を試してください。
  1. ALTER INDEX ステートメントを実行して、インデックスを再構築します。
  2. building状態のインデックステーブルを削除し、クライアント接続のタイムアウト時間をより大きな値に設定して、インデックスを再構築します。

リレーショナルデータベースからApsaraDB for HBaseのPhoenixテーブルにデータをインポートするにはどうすればよいですか?

DataXまたはCDPを使用します。 DataXの詳細については、https://github.com/alibaba/DataXをご覧ください。

データのクエリ時に ERROR 599(42912): Default enable Force index, please set phoenix.force.index=false to disable it...., というエラーメッセージが返された場合はどうすればよいですか?

システムは、SQLステートメントのコンパイル時に、主キー列またはインデックス列がクエリ条件として使用されているかどうかを自動的にチェックします。これは、フルテーブルスキャンを回避するのに役立ちます。主キーまたはインデックス列がクエリ条件として指定されていない場合、このエラーが返されます。主キーまたはインデックス列以外の列をクエリ条件として使用する必要がある場合は、次の方法を使用してこの問題を解決します。 Phoenix 4.xの場合は、クライアント構成ファイル hbase-site.xml を開き、phoenix.force.indexfalse に設定します。次に、クライアントを再起動します。 Phoenix 5.xの場合は、ApsaraDB for HBaseコンソールで phoenix.force.indexfalse に設定してから、HBase SQLサービスを再起動します。

Spring BootでDruid接続プールを使用するときに、java.sql.SQLException: java.lang.IllegalArgumentException: Connection is null or closed というエラーメッセージが返された場合はどうすればよいですか?

Phoenixは接続情報をキャッシュします。これらの接続を接続プールに追加すると、接続が閉じられたときに接続がプールから削除されません。その結果、システムが閉じた接続を再利用しようとすると、このエラーメッセージが返されます。そのため、Druid接続プールを使用しないことをお勧めします。

Pythonクライアントとクエリサーバー間で確立されたアイドル接続を使用してデータをクエリするときに、phoenixdb.errors.InternalError: ('', None, None, None) というエラーメッセージが返された場合はどうすればよいですか?

オープンソースのPythonクライアントは、タイムアウトした接続の再確立をサポートしていません。タイムアウトしたSLB接続を介してクエリサーバーにリクエストを送信すると、このエラーメッセージが返されます。
  1. Alibaba Cloud phoenix-pythonクライアントをダウンロードします
  2. phoenix-pythonドライバーをすでにインストールしている場合は、次のコマンドを実行して削除します:
    rm -rf /usr/lib/python${version}/site-packages/phoenixdb*
  3. ダウンロードしたパッケージを解凍し、phoenixdbディレクトリに移動して、次のコマンドを実行してドライバーをインストールします:
    python setup.py install

Phoenixはマルチテナンシーをサポートしていますか?

いいえ、Phoenixはマルチテナンシーをサポートしていません。 grantrevoke などのコマンドはサポートされていません。