本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Phoenix 客户端
您可以使用完全依赖项构建的JDBC客户端,或者使用使用 Phoenix Query Server 且只能在集群的主节点上运行的 “瘦客户端”(例如,通过使用SQL客户端、步骤、命令行、SSH端口转发等)连接到 Phoenix。使用 “fat” JDBC 客户端时,它仍然需要访问集群的所有节点,因为它直接连接到HBase服务。“瘦”Phoenix 客户端只需要通过默认端口 8765 访问 Phoenix 查询服务器。Phoenix 中有几个脚本
使用 Amazon EMR 步骤通过 Phoenix 进行查询
以下过程从中恢复快照,HBase并使用该数据运行 Phoenix 查询。您可以扩展此示例或创建一个新脚本,以利用 Phoenix 的客户端来满足您的需求。
-
使用以下命令创建安装了 Phoenix 的集群:
aws emr create-cluster --name "Cluster with Phoenix" --log-uri s3://
amzn-s3-demo-bucket
/myLogFolder --release-labelemr-7.3.0
\ --applications Name=Phoenix Name=HBase --ec2-attributes KeyName=myKey \ --instance-type m5.xlarge --instance-count 3 --use-default-roles -
创建后,将以下文件上传到 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.sqlphoenixQuery.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
/ -
使用以下步骤创建提交给您在步骤 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 -
使用
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。
-
使用以下步骤还原复制到集群的快照:
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 -
使用
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
。完成此步骤可能需要几分钟时间。 -
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 | +------------------------------------------+-----------------------------------+