Client Phoenix - Amazon EMR

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Client Phoenix

Ti connetti a Phoenix utilizzando un JDBC client creato con dipendenze complete o utilizzando il «thin client» che utilizza il Phoenix Query Server e può essere eseguito solo su un nodo master di un cluster (ad esempio utilizzando un SQL client, un passaggio, una riga di comando, un SSH port forwarding, ecc.). Quando si utilizza il JDBC client «fat», deve comunque avere accesso a tutti i nodi del cluster perché si connette direttamente ai HBase servizi. Il client Phoenix "thin" deve solo accedere al server query Phoenix a una porta predefinita 8765. Vi sono diversi script all'interno di Phoenix che utilizzano tali client.

Usa un EMR passaggio di Amazon per eseguire query utilizzando Phoenix

La procedura seguente ripristina un'istantanea 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.

  1. Creare un cluster con Phoenix installato, utilizzando il seguente comando:

    aws emr create-cluster --name "Cluster with Phoenix" --log-uri s3://myBucket/myLogFolder --release-label emr-7.2.0 \ --applications Name=Phoenix Name=HBase --ec2-attributes KeyName=myKey \ --instance-type m5.xlarge --instance-count 3 --use-default-roles
  2. 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.sql

    phoenixQuery.sql

    Nota

    È necessario includere COLUMN_ENCODED_BYTES=0 nel seguente esempio solo quando si utilizzano le EMR versioni di Amazon 5.26.0 e successive.

    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";

    Usa il 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/
  3. 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
  4. Usare script-runner.jar per eseguire lo script copySnapshot.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"]

    Questo esegue un MapReduce processo per copiare i dati dell'istantanea nel cluster. HDFS

  5. 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
  6. Usare script-runner.jar per eseguire lo script runQuery.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.

  7. Controlla i risultati dei passaggi nel registro URI utilizzato stdout durante la creazione del cluster nel passaggio 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 | +------------------------------------------+-----------------------------------+