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

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

Phoenix 客户端

您可以使用完全依赖项构建的JDBC客户端,或者使用使用 Phoenix Query Server 且只能在集群的主节点上运行的 “瘦客户端”(例如,通过使用SQL客户端、步骤、命令行、SSH端口转发等)连接到 Phoenix。使用 “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://amzn-s3-demo-bucket/myLogFolder --release-label emr-7.3.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://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 5.26.0 及更高EMR版本时,您只需要在以下示例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";

    使用 Amazon CLI 将文件提交到 S3 存储桶:

    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/
  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://amzn-s3-demo-bucket/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://amzn-s3-demo-bucket/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 | +------------------------------------------+-----------------------------------+