Clients Phoenix - Amazon EMR

Clients Phoenix

Vous vous connectez à Phoenix à l'aide d'un client JDBC construit avec des dépendances complètes ou à l'aide du « client léger » qui utilise le serveur de requêtes Phoenix et ne peut être exécutées que sur un nœud maître d'un cluster (par exemple en utilisant un réacheminement de port SSH, une ligne de commande, une étape, un client SQL, etc.). Lorsque vous utilisez le client JDBC « lourd », il attend toujours d'avoir accès à tous les nœuds du cluster, car il se connecte directement aux services HBase. Le client Phoenix « léger » a uniquement besoin d'un accès au serveur de requête Phoenix dans un port par défaut 8765. Il existe plusieurs scripts au sein de Phoenix qui utilisent ces clients.

Utilisation d'une étape Amazon EMR pour effectuer des requêtes à l'aide de Phoenix

La procédure suivante restaure un instantané de HBase et utilise ces données pour exécuter une requête Phoenix. Vous pouvez étendre cet exemple ou créer un script qui s'appuie sur les clients Phoenix pour répondre à vos besoins.

  1. Créez un cluster avec Phoenix installé, à l'aide de la commande suivante :

    aws emr create-cluster --name "Cluster with Phoenix" --log-uri s3://myBucket/myLogFolder --release-label emr-5.36.1 \ --applications Name=Phoenix Name=HBase --ec2-attributes KeyName=myKey \ --instance-type m5.xlarge --instance-count 3 --use-default-roles
  2. Créez, puis téléchargez les fichiers suivants sur 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

    Note

    Vous ne devez inclure COLUMN_ENCODED_BYTES=0 dans l'exemple suivant que si vous utilisez les versions 5.26.0 et supérieures d'Amazon EMR.

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

    Utilisez l'AWS CLI pour soumettre les fichiers au compartiment S3 :

    aws s3 cp copySnapshot.sh s3://myBucket/ aws s3 cp runQuery.sh s3://myBucket/ aws s3 cp phoenixQuery.sql s3://myBucket/
  3. Créez une table à l'aide de l'étape suivante soumise au cluster que vous avez créé à l'étape 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. Utilisez script-runner.jar pour exécuter le script copySnapshot.sh que vous avez téléchargé précédemment sur votre compartiment 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"]

    Cela exécute une tâche MapReduce pour copier vos données d'instantané dans le cluster HDFS.

  5. Restaurez l'instantané que vous avez copiée dans le cluster à l'aide de l'étape suivante :

    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. Utilisez script-runner.jar pour exécuter le script runQuery.sh que vous avez téléchargé précédemment sur votre compartiment 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 requête s'exécute et renvoie les résultats au stdout de l'étape. La réalisation de cette étape peut prendre quelques minutes.

  7. Inspectez les résultats du stdout de l'étape dans l'URI du journal que vous avez utilisé lorsque vous avez créé le cluster à l'étape 1. Les résultats doivent avoir l'aspect suivant :

    +------------------------------------------+-----------------------------------+ | 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 | +------------------------------------------+-----------------------------------+