

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Phoenix クライアント
<a name="emr-phoenix-clients"></a>

Phoenix には、完全な依存関係によって構築された JDBC クライアント、または Phoenix クエリサーバーを使用しクラスターのマスターノードでのみ実行される「シンクライアント」を使用して接続します (例: SQL クライアント、ステップ、コマンドライン、SSH ポート転送などを使用)。「ファット」 JDBC クライアントを使用している場合は、HBase サービスに直接接続するため、クラスターのすべてのノードにアクセスできる必要があります。「シン」Phoenix クライアントでは、Phoenix クエリサーバーにデフォルトポート 8765 でアクセスできる必要のみがあります。Phoenix には、これらのクライアントを使用する[スクリプト](https://github.com/apache/phoenix/tree/master/bin)がいくつかあります。



**Phoenix を使用したクエリでの Amazon EMR ステップの使用**

次の手順は、HBase からスナップショット復元し、そのデータを使用して Phoenix クエリを実行します。必要に応じてこの例を拡張するか、Phoenix クライアントを利用する新しいスクリプトを作成できます。

1. 次のコマンドを使用して、Phoenix がインストールされた状態でクラスターを作成します。

   ```
   aws emr create-cluster --name "Cluster with Phoenix" --log-uri s3://amzn-s3-demo-bucket/myLogFolder --release-label emr-7.12.0 \
   --applications Name=Phoenix Name=HBase --ec2-attributes KeyName=myKey \
   --instance-type m5.xlarge --instance-count 3 --use-default-roles
   ```

1. 次のファイルを作成して、Amazon S3 にアップロードします。

   copySnapshot.sh

   ```
   sudo su hbase -s /bin/sh -c 'hbase snapshot export \
    -D hbase.rootdir=s3://us-east-1.elasticmapreduce.samples/hbase-demo-customer-data/snapshot/ \
   -snapshot customer_snapshot1 \
   -copy-to hdfs://masterDNSName:8020/user/hbase \
   -mappers 2 -chuser hbase -chmod 700'
   ```

   runQuery.sh

   ```
   aws s3 cp s3://amzn-s3-demo-bucket/phoenixQuery.sql /home/hadoop/
   /usr/lib/phoenix/bin/sqlline-thin.py http://localhost:8765 /home/hadoop/phoenixQuery.sql
   ```

   phoenixQuery.sql
**注記**  
Amazon EMR versions 5.26.0 以降を使用する場合は、以下の例に `COLUMN_ENCODED_BYTES=0` を含めるだけです。

   ```
   CREATE VIEW "customer" (
   pk VARCHAR PRIMARY KEY, 
   "address"."state" VARCHAR,
   "address"."street" VARCHAR,
   "address"."city" VARCHAR,
   "address"."zip" VARCHAR,
   "cc"."number" VARCHAR,
   "cc"."expire" VARCHAR,
   "cc"."type" VARCHAR,
   "contact"."phone" VARCHAR)
   COLUMN_ENCODED_BYTES=0;
   
   CREATE INDEX my_index ON "customer" ("customer"."state") INCLUDE("PK", "customer"."city", "customer"."expire", "customer"."type");
   
   SELECT "customer"."type" AS credit_card_type, count(*) AS num_customers FROM "customer" WHERE "customer"."state" = 'CA' GROUP BY "customer"."type";
   ```

   を使用して、ファイルを S3 バケット AWS CLI に送信します。

   ```
   aws s3 cp copySnapshot.sh s3://amzn-s3-demo-bucket/
   aws s3 cp runQuery.sh s3://amzn-s3-demo-bucket/
   aws s3 cp phoenixQuery.sql s3://amzn-s3-demo-bucket/
   ```

1. ステップ 1 で作成したクラスターに送信された以下の手順を使用してテーブルを作成します。

   createTable.json

   ```
   [
     {
       "Name": "Create HBase Table",
       "Args": ["bash", "-c", "echo $'create \"customer\",\"address\",\"cc\",\"contact\"' | hbase shell"],
       "Jar": "command-runner.jar",
       "ActionOnFailure": "CONTINUE",
       "Type": "CUSTOM_JAR"
     }
   ]
   ```

   ```
   aws emr add-steps --cluster-id j-2AXXXXXXGAPLF \
   --steps file://./createTable.json
   ```

1. `script-runner.jar` を使用して、先に S3 バケットにアップロードした `copySnapshot.sh` スクリプトを実行します。

   ```
   aws emr add-steps --cluster-id j-2AXXXXXXGAPLF \
   --steps Type=CUSTOM_JAR,Name="HBase Copy Snapshot",ActionOnFailure=CONTINUE,\
   Jar=s3://region.elasticmapreduce/libs/script-runner/script-runner.jar,Args=["s3://amzn-s3-demo-bucket/copySnapshot.sh"]
   ```

   これは MapReduce ジョブを実行してスナップショットデータをクラスターの HDFS にコピーします。

1. 次のステップを使用して、クラスターにコピーしたスナップショットを復元します。

   restoreSnapshot.json

   ```
   [
     {
       "Name": "restore",
       "Args": ["bash", "-c", "echo $'disable \"customer\"; restore_snapshot \"customer_snapshot1\"; enable \"customer\"' | hbase shell"],
       "Jar": "command-runner.jar",
       "ActionOnFailure": "CONTINUE",
       "Type": "CUSTOM_JAR"
     }
   ]
   ```

   ```
   aws emr add-steps --cluster-id j-2AXXXXXXGAPLF \
   --steps file://./restoreSnapshot.json
   ```

1. `script-runner.jar` を使用して、先に S3 バケットにアップロードした `runQuery.sh` スクリプトを実行します。

   ```
   aws emr add-steps --cluster-id j-2AXXXXXXGAPLF \
   --steps Type=CUSTOM_JAR,Name="Phoenix Run Query",ActionOnFailure=CONTINUE,\
   Jar=s3://region.elasticmapreduce/libs/script-runner/script-runner.jar,Args=["s3://amzn-s3-demo-bucket/runQuery.sh"]
   ```

   クエリが実行され、ステップの `stdout` に結果が返ります。このステップが完了するには数分間かかる場合があります。

1. ステップ 1 でクラスターを作成したときに使用したログ URI でステップの `stdout` の結果を確認します。結果は次のようになります。

   ```
   +------------------------------------------+-----------------------------------+
   |             CREDIT_CARD_TYPE             |              NUM_CUSTOMERS        |
   +------------------------------------------+-----------------------------------+
   | american_express                         | 5728                              |
   | dankort                                  | 5782                              |
   | diners_club                              | 5795                              |
   | discover                                 | 5715                              |
   | forbrugsforeningen                       | 5691                              |
   | jcb                                      | 5762                              |
   | laser                                    | 5769                              |
   | maestro                                  | 5816                              |
   | mastercard                               | 5697                              |
   | solo                                     | 5586                              |
   | switch                                   | 5781                              |
   | visa                                     | 5659                              |
   +------------------------------------------+-----------------------------------+
   ```