このトピックでは、HBase SQL (Phoenix) の使用方法に関するよくある質問への回答を提供します。
Maven中央リポジトリのali-phoenixの最新バージョンでは、どのJARパッケージがリリースされていますか?
- ali-phoenix 4.xの依存関係:
GroupId ArtifactId 最新バージョン com.aliyun.phoenix ali-phoenix 4.12.0-AliHBase-1.1-0.9 com.aliyun.phoenix ali-phoenix-hive 4.12.0-AliHBase-1.1-0.9 com.aliyun.phoenix ali-phoenix-spark 4.12.0-AliHBase-1.1-0.9 com.aliyun.phoenix ali-phoenix-pherf 4.12.0-AliHBase-1.1-0.9 com.aliyun.phoenix ali-phoenix-queryserver 4.12.0-AliHBase-1.1-0.9 com.aliyun.phoenix ali-phoenix-queryserver-client 4.12.0-AliHBase-1.1-0.9 com.aliyun.phoenix ali-phoenix-pig 4.12.0-AliHBase-1.1-0.9 com.aliyun.phoenix ali-phoenix-flume 4.12.0-AliHBase-1.1-0.9 com.aliyun.phoenix ali-phoenix-core 4.12.0-AliHBase-1.1-0.9 - ali-phoenix 5.xの依存関係:
GroupId ArtifactId 最新バージョン com.aliyun.phoenix ali-phoenix-shaded-thin-client 5.2.5-HBase-2.x com.aliyun.phoenix ali-phoenix-shaded-thin-client 5.2.5-HBase-2.x 説明 クライアントとサードパーティの依存関係間で発生する可能性のある非互換性の問題を回避するために、シェーディングクライアントを使用することをお勧めします。
ali-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アプリケーションのトレースをサポートしていません。この機能は近日中に利用可能になります。
同期タスクの作成時にセカンダリインデックスがタイムアウトした場合はどうすればよいですか?
<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を再起動する必要はありません。名前空間マッピングを有効にするにはどうすればよいですか?
- ali-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 Q&Aグループに連絡して、HBaseサーバーでこの機能を有効にします。
- HBaseクラスターを再起動します。
- クライアントに次の設定を追加します:
- ali-phoenix 5.xの名前空間マッピングを有効にします。
- ApsaraDB for HBaseコンソールにログインします。
- パラメーターを設定します。
phoenix.schema.isNamespaceMappingEnabled
パラメーターとphoenix.schema.mapSystemTablesToNamespace
パラメーターを true に設定します。 - HBaseクラスターを再起動します。
- HBase SQLサービスを再起動します。
説明query server
とHBase server
の両方でこれらのパラメーターを設定する必要があります。 2つのサーバーでのパラメーターの説明が異なることに注意してください。
接続プールはサポートされていますか?
場合によります。Phoenix 4.12.0.X は接続プールをサポートしています。詳細については、PhoenixConnectionPool.java
を参照してください。
Phoenix 5.xはシン クライアントを使用します。 PhoenixConnectionPool.java
を使用して接続プールを作成することはできません。MyBatisなどのサードパーティの接続プールを使用することをお勧めします。詳細については、「接続プールのデモ」をご参照ください。
インデックスの作成に時間がかかりすぎる場合、クライアントを切断できますか?
いいえ、クライアントを切断しないでください。インデックスを作成する手順は2つのステップで構成されます。ステップ1では、サーバーはソーステーブルからインデックステーブルにデータを同期します。ステップ2では、クライアントはインデックステーブルの状態をアクティブに変更するリクエストを送信します。通常、ステップ1では、クライアントはサーバーにリクエストを送信し、サーバーがリクエストを処理します。
インデックステーブルの作成とインデックスデータの同期にはどれくらいの時間がかかりますか?
ほとんどの場合、1,000万行のデータにインデックスを作成するには5~20分かかります。必要な時間は、クラスターの仕様と計算リソースの数によって異なります。
インデックスの作成に時間がかかりすぎて、クライアント接続が自動的に閉じられた場合はどうすればよいですか?
ALTER INDEX
ステートメントを実行して、インデックスを再構築します。- 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.index
を false
に設定します。次に、クライアントを再起動します。 Phoenix 5.xの場合は、ApsaraDB for HBaseコンソールで phoenix.force.index
を false
に設定してから、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)
というエラーメッセージが返された場合はどうすればよいですか?
- Alibaba Cloud phoenix-pythonクライアントをダウンロードします。
- phoenix-pythonドライバーをすでにインストールしている場合は、次のコマンドを実行して削除します:
rm -rf /usr/lib/python${version}/site-packages/phoenixdb*
- ダウンロードしたパッケージを解凍し、phoenixdbディレクトリに移動して、次のコマンドを実行してドライバーをインストールします:
python setup.py install
Phoenixはマルチテナンシーをサポートしていますか?
いいえ、Phoenixはマルチテナンシーをサポートしていません。 grant
や revoke
などのコマンドはサポートされていません。