Phoenix 클라이언트 - Amazon EMR

Phoenix 클라이언트

모든 종속 조건으로 빌드된 JDBC 클라이언트를 사용하거나 Phoenix Query Server를 사용하고 클러스터의 마스터 노드에서만 실행할 수 있는(예를 들면 SQL 클라이언트, 단계 명령줄, SSH 포트 전달 등을 통해) "씬(thin) 클라이언트"를 사용하여 Phoenix에 연결할 수 있습니다. "팻(fat)" JDBC 클라이언트를 사용하는 경우 HBase 서비스에 직접 연결되므로 여전히 클러스터의 모든 노드에 액세스할 수 있어야 합니다. "씬" Phoenix 클라이언트는 기본 포트 8765에서만 Phoenix Query Server에 액세스할 수 있으면 됩니다. Phoenix 안에는 이러한 클라이언트를 사용하는 여러 스크립트가 있습니다.

Amazon EMR 단계를 사용하여 Phoenix를 통해 쿼리

다음 절차에서는 HBase의 스냅샷을 복원한 후 해당 데이터를 사용하여 Phoenix 쿼리를 실행합니다. 자신의 요구에 맞게 Phoenix 클라이언트를 활용하는 새 스크립트를 생성하거나 이 예제를 확장할 수 있습니다.

  1. 다음 명령을 사용하여 Phoenix가 설치된 상태로 클러스터를 생성합니다.

    aws emr create-cluster --name "Cluster with Phoenix" --log-uri s3://amzn-s3-demo-bucket/myLogFolder --release-label emr-7.3.0 \ --applications Name=Phoenix Name=HBase --ec2-attributes KeyName=myKey \ --instance-type m5.xlarge --instance-count 3 --use-default-roles
  2. 다음 파일을 생성하여 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://amzn-s3-demo-bucket/phoenixQuery.sql /home/hadoop/ /usr/lib/phoenix/bin/sqlline-thin.py http://localhost:8765 /home/hadoop/phoenixQuery.sql

    phoenixQuery.sql

    참고

    Amazon EMR 버전 5.26.0 이상을 사용하는 경우 다음 예제에 COLUMN_ENCODED_BYTES=0을 포함하기만 하면 됩니다.

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

    AWS CLI를 사용하여 파일을 S3 버킷으로 제출합니다.

    aws s3 cp copySnapshot.sh s3://amzn-s3-demo-bucket/ aws s3 cp runQuery.sh s3://amzn-s3-demo-bucket/ aws s3 cp phoenixQuery.sql s3://amzn-s3-demo-bucket/
  3. 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. script-runner.jar를 사용하여 S3 버킷으로 이전에 업로드한 copySnapshot.sh 스크립트를 실행합니다.

    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://amzn-s3-demo-bucket/copySnapshot.sh"]

    이렇게 하면 MapReduce 작업이 스냅샷 데이터를 클러스터 HDFS로 복사합니다.

  5. 다음 단계를 사용하여 클러스터로 복사한 스냅샷을 복원합니다.

    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. script-runner.jar를 사용하여 S3 버킷으로 이전에 업로드한 runQuery.sh 스크립트를 실행합니다.

    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://amzn-s3-demo-bucket/runQuery.sh"]

    쿼리가 실행되고 결과가 단계의 stdout로 반환됩니다. 이 단계를 완료하는 데 몇 분이 걸릴 수도 있습니다.

  7. 1단계에서 클러스터를 생성할 때 사용한 로그 URI에서 해당 단계의 stdout 결과를 검사합니다. 결과는 다음과 같아야 합니다.

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