Phoenix 客户端 - Amazon EMR
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Phoenix 客户端

您可以使用JDBC客户端(使用完全依赖项构建)或使用Phoenix查询服务器的“瘦客户端”连接到Phoenix,该客户端只能在群集的管理节点上运行(例如,通过使用SQL客户端、步骤、命令行、SSH端口转发等)。使用“fat”JDBC客户端时,仍然需要访问群集的所有节点,因为它连接到 HBase 服务。“超薄”Phoenix客户端只需要在默认端口8765上访问Phoenix查询服务器。有几个 脚本 在Phoenix中使用这些客户端。

使用 Amazon EMR 步骤通过 Phoenix 进行查询

以下步骤从还原快照 HBase 和使用该数据运行Phoenix查询。您可以扩展此示例,或者创建利用Phoenix客户端来满足您的需求的新脚本。

  1. 使用以下命令创建安装了 Phoenix 的群集:

    aws emr create-cluster --name "Cluster with Phoenix" --log-uri s3://myBucket/myLogFolder --release-label emr-5.31.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.平方

    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); 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 以运行 copySnapshot.sh 您以前上传到S3bucket的脚本:

    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 以运行 runQuery.sh 您以前上传到S3bucket的脚本:

    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. 检查步骤的结果 stdout 在创建步骤1中的群集时使用的日志URI处。结果应如下所示:

    +------------------------------------------+-----------------------------------+ | 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 | +------------------------------------------+-----------------------------------+