Phoenix-Clients - Amazon EMR

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Phoenix-Clients

Sie stellen eine Verbindung mit Phoenix entweder mithilfe eines JDBC-Clients mit vollständigen Abhängigkeiten oder mithilfe des "Thin Clients" her, der den Phoenix-Abfrageserver nutzt und nur auf einem Master-Knoten eines Clusters ausgeführt werden kann (z. B. durch die Verwendung eines SQL-Clients, eines Schritts, einer Befehlszeile, der SSH-Portweiterleitung usw.). Bei der Verwendung des "Fat" JDBC-Clients muss dennoch Zugriff auf alle Knoten des Clusters bestehen, da eine direkte Verbindung mit HBase-Services hergestellt wird. Der "Thin" Phoenix-Client muss nur auf den Phoenix-Abfrageserver über einen Standard-Port 8765 zugreifen. Es gibt mehrere Skripts in Phoenix, die diese Clients verwenden.

Einen Amazon-EMR-Schritt zum Abfragen mit Phoenix verwenden

Das folgende Verfahren stellt einen Snapshot von HBase wieder her und verwendet diese Daten zum Ausführen einer Phoenix-Abfrage. Sie können dieses Beispiel erweitern oder ein neues Skript erstellen, das die Phoenix-Clients an Ihre Anforderungen anpasst.

  1. Erstellen Sie mit dem folgenden Befehl einen Cluster, auf dem Phoenix installiert ist:

    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. Erstellen Sie die folgenden Dateien und laden Sie sie in Amazon S3: hoch:

    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

    Anmerkung

    Sie müssen COLUMN_ENCODED_BYTES=0 in das folgende Beispiel nur einbeziehen, wenn Sie Amazon-EMR-Versionen 5.26.0 und höher verwenden.

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

    Verwenden Sie den AWS CLI , um die Dateien an den S3-Bucket zu senden:

    aws s3 cp copySnapshot.sh s3://myBucket/ aws s3 cp runQuery.sh s3://myBucket/ aws s3 cp phoenixQuery.sql s3://myBucket/
  3. Erstellen Sie eine Tabelle mithilfe des folgenden, an den Cluster gesendeten Schritts, den Sie in Schritt 1 erstellt haben:

    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. Verwenden Sie script-runner.jar, um das zuvor in Ihren S3-Bucket hochgeladene copySnapshot.sh-Skript auszuführen:

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

    Dadurch wird ein MapReduce Job ausgeführt, um Ihre Snapshot-Daten auf das Cluster-HDFS zu kopieren.

  5. Stellen Sie den Snapshot, den Sie in den Cluster kopiert haben, mit dem folgenden Schritt wieder her:

    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. Verwenden Sie script-runner.jar, um das zuvor in Ihren S3-Bucket hochgeladene runQuery.sh-Skript auszuführen:

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

    Die Abfrage wird ausgeführt und gibt das Ergebnis an stdout des Schritts zurück. Es kann einige Minuten dauern, bis dieser Schritt abgeschlossen ist.

  7. Prüfen Sie die Ergebnisse von stdout des Schritts an der Protokoll-URI, mit der Sie den Cluster in Schritt 1 erstellt haben. Die Ergebnisse sollten wie folgt aussehen:

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