Phoenix 用戶端 - Amazon EMR

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Phoenix 用戶端

您可以使用透過完整相依性建置的 JDBC 用戶端連接到 Phoenix 或使用「精簡用戶端」,其會使用 Phoenix 查詢伺服器和只能在叢集主節點上執行 (例如,使用 SQL 用戶端、一個步驟、命令列、SSH 連接埠轉送等)。當使用「大量」JDBC 用戶端,仍需要存取叢集的所有節點,因為它會直接連接至 HBase 服務。「精簡」Phoenix 用戶端只需要在預設連接埠 8765 存取 Phoenix 查詢伺服器。在使用這些用戶端的 Phoenix 中,有多種指令碼

透過 Phoenix 使用 Amazon EMR 步驟進行查詢

下列程序從 HBase 恢復快照,並使用該資料執行 Phoenix 查詢。您可以擴展這個範例或建立新的指令碼,並善加利用 Phoenix 的用戶端以滿足您的需求。

  1. 透過使用以下列命令安裝的 Phoenix 來建立叢集:

    aws emr create-cluster --name "Cluster with Phoenix" --log-uri s3://myBucket/myLogFolder --release-label emr-7.1.0 \ --applications Name=Phoenix Name=HBase --ec2-attributes KeyName=myKey \ --instance-type m5.xlarge --instance-count 3 --use-default-roles
  2. 建立,然後將下列檔案上傳至 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://myBucket/phoenixQuery.sql /home/hadoop/ /usr/lib/phoenix/bin/sqlline-thin.py http://localhost:8765 /home/hadoop/phoenixQuery.sql

    phoenixQuery.sql

    注意

    當您使用 Amazon EMR 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";

    使用 AWS CLI 將檔案提交至 S3 儲存貯體:

    aws s3 cp copySnapshot.sh s3://myBucket/ aws s3 cp runQuery.sh s3://myBucket/ aws s3 cp phoenixQuery.sql s3://myBucket/
  3. 使用您在步驟 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
  4. 使用 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://myBucket/copySnapshot.sh"]

    這會執行 MapReduce 工作,將快照資料複製到叢集 HDFS。

  5. 使用以下步驟恢復您複製到叢集的快照:

    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
  6. 使用 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://myBucket/runQuery.sh"]

    查詢會執行結果並將其傳回至步驟 stdout。此步驟需要幾分鐘的時間來完成。

  7. 在當步驟 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 | +------------------------------------------+-----------------------------------+