ApsaraDB for HBase 上の HBase SQL (Phoenix) に関するよくある質問とその回答です。
Maven セントラルリポジトリでリリースされている ali-phoenix 最新バージョンの JAR パッケージ
-
ali-phoenix 4.x のデプロイメントパッケージは次のとおりです。
GroupId
ArtifactId
Latest version
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
Latest version
com.aliyun.phoenix
ali-phoenix-shaded-thin-client
5.2.5-HBase-2.x
説明シンクライアントとサードパーティのビジネスアプリケーション間のパッケージの競合を避けるために、シンクライアントのシェードパッケージを使用してください。
ali-phoenix JDBC URL の形式
QueryServer が無効な場合はファットクライアントを使用し、QueryServer が有効な場合はシンクライアントを使用します。ali-phoenix は keytab ベースの認証をサポートしていないため、Java Database Connectivity (JDBC) の URL 形式は Apache Phoenix とは異なる点にご注意ください。
-
ファットクライアントドライバー
[URL 構文]
jdbc:phoenix:[[ZK_HOST1:port, ZK_HOST2:port, ZK_HOST3:port | comma-separated ZooKeeper クォーラム [:port] [:hbase ルート 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 -
シンクライアントドライバー
[URL 構文]
jdbc:phoenix:thin:[key=value[;key=value...]][URL の例]
jdbc:phoenix:thin:url=http://localhost:8765;serialization=PROTOBUF
QueryServer のサポート
HBase 1.x はファットクライアントモードで Phoenix 4.x を使用します。QueryServer を使用するには、ご自身でセットアップする必要があります。
HBase 2.0 には HBase SQL サービスが含まれており、QueryServer はデフォルトで有効になっています。
Tracing Web Application のサポート
現在サポートされていません。この機能は、ApsaraDB for HBase 上の ali-phoenix 向けに開発中です。
同期セカンダリインデックス構築のタイムアウト
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>
HBase 2.0 上の Phoenix 5.x:コンソールのパラメータ設定でこれらのパラメータを変更し、HBase SQL サービスを再起動します。HBase を再起動する必要はありません。HBase SQL サービス (Phoenix) のみを再起動してください。
Phoenix 5.x クラスターでは、タイムアウトパラメーターを調整するとオンラインクエリに影響します。代わりに、ファットクライアントまたは MapReduce クラスターを使用してインデックスを構築してください。詳細については、
。
名前空間マッピングの有効化
-
4.x で有効にする手順
-
クライアントに次の設定を追加します。
<property> <name>phoenix.schema.isNamespaceMappingEnabled</name> <value>true</value> </property> <property> <name>phoenix.schema.mapSystemTablesToNamespace</name> <value>true</value> </property> サーバー側のパラメータを有効にするには、ApsaraDB for HBase のサポートにお問い合わせください。
HBase クラスターを再起動します。
-
-
5.x で有効にする手順
コンソールにログインします。
-
パラメータを設定します。
phoenix.schema.isNamespaceMappingEnabledとphoenix.schema.mapSystemTablesToNamespaceを true に設定します。 HBase クラスターを再起動します。
SQL サービスを再起動します。
説明説明は異なりますが、同一のパラメータを 2 セット設定する必要があります。一方はクエリサーバー用、もう一方は HBase サーバー用で、両方を設定する必要があります。
接続プールのサポート
Phoenix 4.x バージョン 4.12.0.X は PhoenixConnectionPool.java によって接続プールをサポートします。
Phoenix 5.x はシンクライアント実装に基づいているため、PhoenixConnectionPool.java は適用されません。代わりに MyBatis などのサードパーティの接続プールを使用してください。例については、このリファレンスをご参照ください。
インデックス作成に時間がかかりすぎる場合、クライアントを切断してもよいですか?
いいえ。インデックス作成には 2 つのステップがあります。まず、サーバーがソーステーブルからインデックステーブルにデータを同期します。次に、クライアントがインデックステーブルのステータスを ACTIVE に設定するリクエストを送信します。最初のステップはクライアントがリクエストを開始した後にサーバーで実行されますが、2 番目のステップでは、アクティブなクライアント接続が必要です。
同期インデックステーブル作成時のデータ同期速度
1,000 万件のレコードのインデックス作成には、通常 5 分から 20 分かかります。実際の時間は、クラスターの設定とリソースの使用状況によって異なります。
インデックス作成タイムアウトによるクライアント切断への対処
切断後、インデックステーブルは通常 BUILDING 状態のままになります。sqlline の !table コマンドでステータスを確認してください。インデックス作成は、ステータスが ACTIVE になって初めて完了します。復旧するには、次のいずれかの方法を実行してください。
alter indexコマンドを使用してインデックスを再構築します。BUILDING状態のインデックステーブルを削除し、クライアントのタイムアウト値を増やして、再度インデックスを作成します。
リレーショナルデータベースから Phoenix テーブルへのデータインポート
DataX を使用します。例については、「使用例」をご参照ください。
クエリ中に「ERROR 599(42912): Default enable Force index, please set phoenix.force.index=false to disable it....,」というエラーが発生した場合の対処方法
Phoenix は、フルテーブルスキャンを防ぐために SQL コンパイル中にインデックスの使用を強制します。このエラーは、クエリが主キーでもインデックスでもない列 (非インデックス列) でフィルタリングした場合に発生します。このようなクエリを許可するには、強制インデックスチェックを無効にします。
Phoenix 4.x: クライアントの
hbase-site.xmlでphoenix.force.indexをfalseに設定してから、クライアントを再起動します。Phoenix 5.x: コンソールのパラメーター設定で
phoenix.force.indexをfalseに設定し、HBase SQL サービスを再起動します。
Spring Boot で Druid 接続プールを使用しているときの「java.sql.SQLException: java.lang.IllegalArgumentException: Connection is null or closed」エラーへの対処
Phoenix は内部で接続をキャッシュします。Druid のような外部の接続プールでラップすると競合が発生し、一部の接続が予期せずクローズされることがあります。外部プールを削除し、Phoenix の組み込み接続キャッシュを使用してください。
Python クライアントで QueryServer に接続後、非アクティブな状態が続くと「phoenixdb.errors.InternalError: ('', None, None, None)」エラーが発生する理由
オープンソースの Python クライアントは、タイムアウト後に自動的に再接続しません。Server Load Balancer (SLB) インスタンス経由の接続がアイドル状態になりタイムアウトすると、次のリクエストは別の QueryServer ノードにルーティングされ、このエラーが発生します。
この問題を解決するには、オープンソースのクライアントを Alibaba Cloud phoenix-python クライアントに置き換えてください。このクライアントは再接続を自動的に処理します。
Alibaba Cloud phoenix-python クライアントを こちらからダウンロードします。
-
既存の phoenix-python ドライバーがインストールされている場合は、まずそれを削除します。
rm -rf /usr/lib/python${version}/site-packages/phoenixdb* -
ダウンロードしたパッケージを解凍し、
phoenixdbディレクトリに移動して、ドライバーをインストールします。python setup.py install
Phoenix のマルチテナンシーサポート
grant と revoke コマンドは現在サポートされていません。