Client Phoenix
Ci sii connette a Phoenix utilizzando un client JDBC costruito con dipendenze complete oppure il "thin client" che utilizza Phoenix Query Server e che può essere eseguito solo su un nodo master di un cluster (ad esempio, utilizzando un client SQL, un passo, una riga di comando, l'inoltro della porta SSH, ecc. Quando si usa il client JDBC "fat", deve comunque avere accesso a tutti i nodi del cluster perché si connette direttamente ai servizi HBase. Il client Phoenix "thin" deve solo accedere al server query Phoenix a una porta predefinita 8765. Vi sono diversi script
Utilizzo di una fase Amazon EMR per eseguire query utilizzando Phoenix
La seguente procedura ripristina una snapshot da HBase e utilizza tali dati per eseguire una query Phoenix. È possibile estendere questo esempio o creare un nuovo script che sfrutti i client di Phoenix per soddisfare le proprie esigenze.
-
Creare un cluster con Phoenix installato, utilizzando il seguente comando:
aws emr create-cluster --name "Cluster with Phoenix" --log-uri s3://
myBucket
/myLogFolder --release-labelemr-5.36.1
\ --applications Name=Phoenix Name=HBase --ec2-attributes KeyName=myKey \ --instance-type m5.xlarge --instance-count 3 --use-default-roles -
Crea e in seguito carica i seguenti file in 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.sqlphoenixQuery.sql
Nota
Quando si utilizza Amazon EMR versione 5.26.0 e successive, è sufficiente includere
COLUMN_ENCODED_BYTES=0
nell'esempio seguente.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";
Utilizzare la AWS CLI per inviare i file al bucket S3:
aws s3 cp copySnapshot.sh s3://
myBucket
/ aws s3 cp runQuery.sh s3://myBucket
/ aws s3 cp phoenixQuery.sql s3://myBucket
/ -
Creazione di una tabella utilizzando i seguenti passaggi inviati al cluster creato nella Fase 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 -
Usare
script-runner.jar
per eseguire lo scriptcopySnapshot.sh
precedentemente caricato nel bucket S3: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"]Viene eseguito un processo di MapReduce per copiare i dati dello snapshot negli HDFS del cluster.
-
Ripristinare lo snapshot copiato nel cluster utilizzando i seguenti passaggi:
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 -
Usare
script-runner.jar
per eseguire lo scriptrunQuery.sh
precedentemente caricato nel bucket S3: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"]La query viene eseguita e restituisce i risultati al
stdout
della fase. Il completamento della fase può richiedere alcuni minuti. -
Ispezionare i risultati del
stdout
della fase presso l'URI di registro utilizzato per creare il cluster nella Fase 1. Il risultato sarà simile al seguente:+------------------------------------------+-----------------------------------+ | 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 | +------------------------------------------+-----------------------------------+