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

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 all'interno di Phoenix che utilizzano tali client.

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.

  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.1.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

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

    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. Ispeziona i risultati del passo stdout all'URI del log che hai utilizzato quando hai creato il 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 | +------------------------------------------+-----------------------------------+