Apache Spark용 Amazon Redshift 통합을 통해 Amazon Redshift 데이터에서 Apache Spark 애플리케이션을 간소화하고 속도를 높입니다.

Apache Spark용 Amazon Redshift 통합을 통해 Amazon Redshift 데이터에서 Apache Spark 애플리케이션을 간소화하고 속도를 높입니다.

소스 노드 : 2597866

고객 사용 아마존 레드 시프트 구조화 및 반구조화 데이터의 페타바이트에서 비즈니스 크리티컬 분석을 실행합니다. Apache Spark는 ETL(추출, 변환 및 로드), 대화형 분석 및 기계 학습(ML)과 같은 사용 사례를 위한 애플리케이션을 구축하는 데 사용할 수 있는 널리 사용되는 프레임워크입니다. Apache Spark를 사용하면 Amazon Redshift 데이터 웨어하우스의 데이터에 액세스하여 Java, Scala 및 Python과 같은 다양한 언어로 애플리케이션을 구축할 수 있습니다.

Apache Spark용 Amazon Redshift 통합을 통해 개발자는 Amazon Redshift 데이터에서 Apache Spark 애플리케이션을 원활하게 구축하고 실행할 수 있습니다. 개발자는 다음과 같은 AWS 분석 및 ML 서비스를 사용할 수 있습니다. 아마존 EMR, AWS 접착제아마존 세이지 메이커 Amazon Redshift 데이터 웨어하우스에서 읽고 쓰는 Apache Spark 애플리케이션을 손쉽게 구축할 수 있습니다. 애플리케이션의 성능이나 데이터의 트랜잭션 일관성을 손상시키지 않고 그렇게 할 수 있습니다.

이 게시물에서는 Apache Spark용 Amazon Redshift 통합이 분석 및 ML에 중요하고 효율적인 이유에 대해 설명합니다. 또한 Apache Spark와 Amazon Redshift 통합을 사용하여 비즈니스 영향을 미치는 사용 사례에 대해 논의합니다. 마지막으로 Apache Spark 애플리케이션에서 이 공식 AWS 커넥터를 사용하는 방법에 대한 단계별 예제를 안내합니다.

Apache Spark용 Amazon Redshift 통합

Apache Spark용 Amazon Redshift 통합은 번거롭고 종종 수동으로 spark-redshift 커넥터를 설정하는 프로세스를 최소화합니다(커뮤니티 버전) 분석 및 ML 작업을 준비하는 데 필요한 시간을 단축합니다. 데이터 웨어하우스에 대한 연결을 지정하기만 하면 몇 분 안에 Apache Spark 기반 애플리케이션에서 Amazon Redshift 데이터 작업을 시작할 수 있습니다.

관련 데이터만 Amazon Redshift 데이터 웨어하우스에서 소비하는 Apache Spark 애플리케이션으로 이동하도록 정렬, 집계, 제한, 조인 및 스칼라 함수와 같은 작업에 여러 푸시다운 기능을 사용할 수 있습니다. 이를 통해 애플리케이션의 성능을 향상시킬 수 있습니다. Amazon Redshift 관리자는 Spark 기반 애플리케이션에서 생성된 SQL을 쉽게 식별할 수 있습니다. 이번 포스팅에서는 Apache Spark job에서 생성된 SQL을 찾는 방법을 보여드리겠습니다.

또한 Apache Spark용 Amazon Redshift 통합은 임시 디렉터리에서 데이터를 준비할 때 Parquet 파일 형식을 사용합니다. Amazon Redshift는 UNLOAD SQL 문을 사용하여 이 임시 데이터를 아마존 단순 스토리지 서비스 (아마존 S3). Apache Spark 애플리케이션은 성능을 향상시키는 임시 디렉터리(Parquet 파일 형식으로 저장됨)에서 결과를 검색합니다.

또한 다음을 활용하여 애플리케이션을 더 안전하게 만드는 데 도움을 줄 수 있습니다. AWS 자격 증명 및 액세스 관리 (IAM) Amazon Redshift에 연결하기 위한 자격 증명.

Apache Spark용 Amazon Redshift 통합은 spark-redshift 커넥터(커뮤니티 버전) 성능과 보안을 강화하여 애플리케이션 성능을 최대 10배까지 높일 수 있습니다.

Apache Spark와 Amazon Redshift 통합의 사용 사례

사용 사례의 경우 제품 기반 회사의 경영진은 여러 시장에서 각 제품의 판매를 알고 싶어합니다. 회사의 매출이 동적으로 변동함에 따라 경영진이 여러 시장에서 매출을 추적하는 것이 어려운 일이 되었습니다. 그러나 전체 매출이 감소하고 있으며 회사 경영진은 판촉 캠페인을 위해 이러한 시장을 목표로 삼을 수 있도록 실적이 저조한 시장을 찾고자 합니다.

여러 시장에 걸친 판매의 경우 주문, 거래 및 배송 데이터와 같은 제품 판매 데이터는 데이터 레이크의 Amazon S3에서 사용할 수 있습니다. 데이터 엔지니어링 팀은 Amazon EMR 또는 AWS Glue와 함께 Apache Spark를 사용하여 Amazon S3에서 이 데이터를 분석할 수 있습니다.

인벤토리 데이터는 Amazon Redshift에서 사용할 수 있습니다. 마찬가지로 데이터 엔지니어링 팀은 집계 및 변환을 수행하기 위해 Apache Spark용 Amazon Redshift 통합을 사용하여 Amazon EMR 또는 AWS Glue 작업을 사용하는 Apache Spark로 이 데이터를 분석할 수 있습니다. 집계 및 변환된 데이터 세트는 Apache Spark용 Amazon Redshift 통합을 사용하여 Amazon Redshift에 다시 저장할 수 있습니다.

Apache Spark용 Amazon Redshift 통합과 함께 Apache Spark와 같은 분산 프레임워크를 사용하면 데이터 레이크 및 데이터 웨어하우스에 대한 가시성을 제공하여 판매 통찰력을 생성할 수 있습니다. 이러한 통찰력은 Amazon Redshift의 비즈니스 이해 관계자 및 LOB(Line of Business) 사용자가 정보에 입각한 결정을 내리고 수익이 낮은 시장 부문을 대상으로 하는 대상 프로모션을 실행하는 데 사용할 수 있습니다.

또한 다음 사용 사례에서 Apache Spark와 Amazon Redshift 통합을 사용할 수 있습니다.

  • Apache Spark 작업을 실행하는 Amazon EMR 또는 AWS Glue 고객은 데이터를 변환하고 ETL 파이프라인의 일부로 Amazon Redshift에 기록하려고 합니다.
  • ML 고객은 Amazon Redshift에서 데이터 액세스 및 변환을 위한 기능 엔지니어링을 위해 SageMaker와 함께 Apache Spark를 사용합니다.
  • Amazon EMR, AWS Glue 또는 SageMaker 고객은 노트북에서 Amazon Redshift의 데이터로 대화형 데이터 분석을 위해 Apache Spark를 사용합니다.

Apache Spark 애플리케이션의 Apache Spark용 Amazon Redshift 통합의 예

이 게시물에서는 Amazon EMR에서 Amazon Redshift를 연결하는 단계를 보여줍니다. 아마존 엘라스틱 컴퓨트 클라우드 (아마존 EC2), Amazon EMR 서버리스, 공통 스크립트를 사용하는 AWS Glue. 다음 샘플 코드에서는 2008년 분기별 매출을 보여 주는 보고서를 생성합니다. 이를 위해 Apache Spark DataFrame을 사용하여 두 개의 Amazon Redshift 테이블을 조인하고, 조건자 푸시다운을 실행하고, 데이터를 집계 및 정렬하고, 변환된 데이터를 Amazon Redshift로 다시 보냅니다. 스크립트는 PySpark를 사용합니다.

스크립트 사용 Amazon Redshift에 대한 IAM 기반 인증. Amazon EMR 및 AWS Glue에서 사용하는 IAM 역할에는 Amazon Redshift를 인증하고 임시 데이터 저장을 위해 S3 버킷에 액세스할 수 있는 적절한 권한이 있어야 합니다.

다음 예제 정책은 IAM 역할이 GetClusterCredentials 작업 :

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "redshift:GetClusterCredentials", "Resource": "arn:aws:redshift:<aws_region_name>:xxxxxxxxxxxx:dbuser:*/temp_*" }
}

다음 예제 정책은 임시 데이터 저장을 위해 S3 버킷에 대한 액세스를 허용합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket" ], "Resource": "arn:aws:s3:::<s3_bucket_name>" } ]
}

전체 스크립트는 다음과 같습니다.

from pyspark.sql import SparkSession
from pyspark.sql.functions import col # Initiate Apache Spark session
spark = SparkSession .builder .appName("SparkRedshiftConnector") .enableHiveSupport() .getOrCreate() # Set connection options for Amazon Redshift
jdbc_iam_url = "jdbc:redshift:iam://redshift-spark-connector-1.xxxxxxxxxxx.<aws_region_name>.redshift.amazonaws.com:5439/sample_data_dev"
temp_dir = 's3://<s3_bucket_name>/redshift-temp-dir/'
aws_role = 'arn:aws:iam::xxxxxxxxxxxx:role/redshift-s3' # Set query group for the query. More details on Amazon Redshift WLM https://docs.aws.amazon.com/redshift/latest/dg/cm-c-executing-queries.html
queryGroup = "emr-redshift"
jdbc_iam_url_withQueryGroup = jdbc_iam_url+'?queryGroup='+queryGroup # Set User name for the query
userName = 'awsuser'
jdbc_iam_url_withUserName = jdbc_iam_url_withQueryGroup+';user='+userName # Define the Amazon Redshift context
redshiftOptions = { "url": jdbc_iam_url_withUserName, "tempdir": temp_dir, "aws_iam_role" : aws_role
} # Create the sales DataFrame from Amazon Redshift table using io.github.spark_redshift_community.spark.redshift class
sales_df = ( spark.read .format("io.github.spark_redshift_community.spark.redshift") .options(**redshiftOptions) .option("dbtable", "tickit.sales") .load()
) # Create the date Data Frame from Amazon Redshift table
date_df = ( spark.read .format("io.github.spark_redshift_community.spark.redshift") .options(**redshiftOptions) .option("dbtable", "tickit.date") .load()
) # Assign a Data Frame to the above output which will be written back to Amazon Redshift
output_df= sales_df.join(date_df, sales_df.dateid == date_df.dateid, 'inner').where( col("year") == 2008).groupBy("qtr").sum("qtysold").select( col("qtr"), col("sum(qtysold)")).sort(["qtr"], ascending=[1]).withColumnRenamed("sum(qtysold)","total_quantity_sold") # Display the output
output_df.show() ## Lets drop the queryGroup for easy validation of push down queries
# Set User name for the query
userName = 'awsuser'
jdbc_iam_url_withUserName = jdbc_iam_url+'?user='+userName # Define the Amazon Redshift context
redshiftWriteOptions = { "url": jdbc_iam_url_withUserName, "tempdir": temp_dir, "aws_iam_role" : aws_role
} # Write the Data Frame back to Amazon Redshift
output_df.write .format("io.github.spark_redshift_community.spark.redshift") .mode("overwrite") .options(**redshiftWriteOptions) .option("dbtable", "tickit.test") .save()

환경에서 이전 스크립트를 사용하려는 경우 다음 변수의 값을 환경에 적합한 값으로 바꾸십시오. jdbc_iam_url, temp_diraws_role.

다음 섹션에서는 이 스크립트를 실행하여 Amazon Redshift에서 사용할 수 있는 샘플 데이터 세트를 집계하는 단계를 안내합니다.

사전 조건

시작하기 전에 다음 전제 조건이 충족되는지 확인하십시오.

AWS CloudFormation을 사용하여 리소스 배포

CloudFormation 스택을 배포하려면 다음 단계를 완료하십시오.

  1. 에 로그인 AWS 관리 콘솔, 그런 다음 CloudFormation 스택을 시작합니다.
    BDB-2063-실행-클라우드 형성-스택

당신은 또한 수 CloudFormation 템플릿 다운로드 IaC(Infrastructure as Code)를 통해 이 게시물에서 언급한 리소스를 생성합니다. 새 CloudFormation 스택을 시작할 때 이 템플릿을 사용하십시오.

  1. 페이지 하단으로 스크롤하여 선택 AWS CloudFormation이 IAM 리소스를 생성 할 수 있음을 인정합니다 아래에 기능다음을 선택 스택 생성.

스택 생성 프로세스를 완료하는 데 15~20분이 걸립니다. CloudFormation 템플릿은 다음 리소스를 생성합니다.

    • 필요한 서브넷, 라우팅 테이블 및 NAT 게이트웨이가 있는 Amazon VPC
    • 이름이 있는 S3 버킷 redshift-spark-databucket-xxxxxxx (xxxxxxx는 버킷 이름을 고유하게 만드는 임의의 문자열입니다.)
    • 데이터베이스 내부에 샘플 데이터가 로드된 Amazon Redshift 클러스터 dev 기본 사용자 redshiftmasteruser. 이 블로그 게시물의 목적을 위해, redshiftmasteruser 관리 권한이 사용됩니다. 그러나 프로덕션 환경에서는 세분화된 액세스 제어가 있는 사용자를 사용하는 것이 좋습니다.
    • Amazon Redshift 클러스터의 개발 데이터베이스에서 임시 자격 증명을 요청할 수 있는 기능과 함께 Amazon Redshift에 사용할 IAM 역할
    • Amazon EMR 스튜디오 필요한 IAM 역할
    • 필요한 IAM 역할이 있는 EC6.9.0 클러스터의 Amazon EMR 릴리스 버전 2
    • Amazon EMR 서버리스 애플리케이션 릴리스 버전 6.9.0
    • AWS Glue 연결 및 AWS Glue 작업 버전 4.0
    • A 주피터 노트 EC2 클러스터에서 Amazon EMR을 사용하여 Amazon EMR Studio를 사용하여 실행
    • Amazon EMR Studio 및 Amazon EMR Serverless를 사용하여 실행할 PySpark 스크립트
  1. 스택 생성이 완료되면 스택 이름을 선택합니다. redshift-spark 그리고 출력

이 게시물의 뒷부분에서 이러한 출력 값을 활용합니다.

다음 섹션에서는 Amazon EC2, Amazon EMR Serverless 및 AWS Glue의 Amazon EMR에서 Apache Spark에 대한 Amazon Redshift 통합 단계를 보여줍니다.

EC2의 Amazon EMR에서 Apache Spark와 Amazon Redshift 통합 사용

Amazon EMR 릴리스 버전 6.9.0 이상부터 Apache Spark용 Amazon Redshift 통합 및 Amazon Redshift JDBC 드라이버를 사용하는 커넥터를 Amazon EMR에서 로컬로 사용할 수 있습니다. 이러한 파일은 아래에 있습니다. /usr/share/aws/redshift/ 예배 규칙서. 그러나 이전 버전의 Amazon EMR에서는 커뮤니티 의 버전 spark-redshift 커넥터 사용할 수 있습니다.

다음 예는 다음을 통해 PySpark 커널을 사용하여 Amazon Redshift를 연결하는 방법을 보여줍니다. Amazon EMR 스튜디오 공책. CloudFormation 스택은 Amazon EMR Studio, EC2 클러스터의 Amazon EMR 및 실행할 수 있는 Jupyter 노트북을 생성했습니다. 이 예를 살펴보려면 다음 단계를 완료하세요.

  1. S3 버킷에서 사용할 수 있는 Jupyter 노트북을 다운로드합니다.
    • CloudFormation 스택 출력에서 ​​다음 값을 찾습니다. EMRStudioNotebook, 이는 다음을 가리켜야 합니다. redshift-spark-emr.ipynb S3 버킷에서 사용할 수 있는 노트북.
    • 링크를 선택하거나 노트북의 URL을 복사하여 새 탭에서 링크를 엽니다.
    • 링크를 연 후 다음을 선택하여 노트북을 다운로드합니다. 다운로드, 파일을 컴퓨터에 로컬로 저장합니다.
  1. 키에 대한 CloudFormation 스택 출력에 제공된 링크를 선택하거나 복사하여 Amazon EMR Studio에 액세스합니다. EMRStudioURL.
  2. 탐색 창에서 워크스페이스.
  3. 왼쪽 메뉴에서 작업 공간 생성.
  4. 예를 들어 작업 공간의 이름을 제공하십시오. redshift-spark.
  5. 확장 고급 구성 섹션을 선택하고 EMR 클러스터에 Workspace 연결.
  6. $XNUMX Million 미만 EMR 클러스터에 연결, 이름이 있는 EMR 클러스터를 선택합니다. emrCluster-Redshift-Spark.
  7. 왼쪽 메뉴에서 작업 공간 생성.
  8. Amazon EMR Studio 작업 공간이 생성되고 연결됨 상태가 되면 작업 공간 이름을 선택하여 작업 공간에 액세스할 수 있습니다.

이렇게 하면 새 탭에서 작업 공간이 열립니다. 팝업 차단기가 있는 경우 Workspace에서 팝업 차단기를 열거나 비활성화하도록 허용해야 할 수 있습니다.

이제 Amazon EMR Studio 작업 공간에서 이전에 다운로드한 Jupyter 노트북을 업로드합니다.

  1. 왼쪽 메뉴에서 가이드라가 로컬 파일 시스템을 탐색하고 Jupyter 노트북을 업로드합니다(redshift-spark-emr.ipynb).
  2. 선택(더블 클릭) redshift-spark-emr.ipynb 노트북을 열 수 있습니다.

노트북은 수행하는 다양한 작업에 대한 세부 정보를 제공합니다. 섹션에서 Amazon Redshift 클러스터에 연결할 변수 정의에 대한 값을 업데이트할 필요가 없습니다. jdbc_iam_url, temp_diraws_role 이는 AWS CloudFormation에서 자동으로 업데이트되기 때문입니다. AWS CloudFormation은 또한 섹션에 언급된 단계를 수행했습니다. 사전 조건 노트북의 섹션.

이제 노트북 실행을 시작할 수 있습니다.

  1. 개별 셀을 선택한 다음 다음을 선택하여 실행합니다. 연극.

의 키 조합을 사용할 수도 있습니다. Shift + Enter or Shift+Return. 또는 다음을 선택하여 모든 셀을 실행할 수 있습니다. 모든 셀 실행 를 시청하여 이에 대해 더 많은 정보를 얻을 수 있습니다. 달리기 메뉴를 선택합니다.

  1. Apache Spark용 Amazon Redshift 통합에 의해 Amazon Redshift 클러스터에서 수행된 조건자 푸시다운 작업을 찾습니다.

최적화된 Parquet 형식으로 Amazon S3에 저장된 임시 데이터도 볼 수 있습니다. 섹션에서 셀을 실행하면 출력을 볼 수 있습니다. Amazon Redshift에서 실행된 마지막 쿼리 가져오기.

  1. Amazon EC2의 Amazon EMR에서 작업으로 생성된 테이블을 검증하려면 Amazon Redshift 콘솔로 이동하여 클러스터를 선택합니다. redshift-spark-redshift-cluster 를 시청하여 이에 대해 더 많은 정보를 얻을 수 있습니다. 프로비저닝된 클러스터 대시보드 페이지.
  2. 클러스터 세부 정보에서 쿼리 데이터 메뉴, 선택 쿼리 편집기 v2의 쿼리.
  3. 탐색 창에서 클러스터를 선택하고 인증을 요청할 때 Amazon Redshift 클러스터에 연결합니다.
  4. 선택 임시 자격 증명.
  5. 럭셔리 데이터베이스, 입력 dev.
  6. 럭셔리 사용자 이름, 입력 redshiftmasteruser.
  7. 왼쪽 메뉴에서 찜하기.
  8. 탐색 창에서 클러스터를 확장합니다. redshift-spark-redshift-cluster, 개발 데이터베이스 확장, 확장 tickit, 확장 테이블 스키마 내부의 모든 테이블을 나열하려면 tickit.

테이블을 찾아야 합니다. test_emr.

  1. 테이블 선택(오른쪽 클릭) test_emr다음을 선택 테이블 선택 테이블을 쿼리합니다.
  2. 왼쪽 메뉴에서 달리기 SQL 문을 실행합니다.

Amazon EMR 서버리스에서 Apache Spark와 Amazon Redshift 통합 사용

Amazon EMR 릴리스 버전 6.9.0 이상은 Apache Spark JAR(Amazon Redshift에서 관리) 및 Amazon Redshift JDBC JAR에 대한 Amazon Redshift 통합을 Amazon EMR 서버리스에서 로컬로 제공합니다. 이러한 파일은 아래에 있습니다. /usr/share/aws/redshift/ 예배 규칙서. 다음 예에서는 이전에 생성한 CloudFormation 스택에 의해 S3 버킷에서 사용할 수 있는 Python 스크립트를 사용합니다.

  1. CloudFormation 스택 출력에서 ​​다음에 대한 값을 기록해 둡니다. EMRServerlessExecutionScript, S3 버킷에 있는 Python 스크립트의 위치입니다.
  2. 또한 다음 값에 유의하십시오. EMRServerlessJobExecutionRole, Amazon EMR 서버리스 작업 실행에 사용할 IAM 역할입니다.
  3. 키에 대한 CloudFormation 스택 출력에 제공된 링크를 선택하거나 복사하여 Amazon EMR Studio에 액세스합니다. EMRStudioURL.
  4. 왼쪽 메뉴에서 어플리케이션 아래에 서버리스 탐색 창에서

이름이 있는 CloudFormation 스택에서 생성된 EMR 애플리케이션을 찾을 수 있습니다. emr-spark-redshift.

  1. 작업을 제출할 애플리케이션 이름을 선택합니다.
  2. 왼쪽 메뉴에서 작업 제출.
  3. $XNUMX Million 미만 직업 세부 정보에 대한 성함, 식별 가능한 작업 이름을 입력합니다.
  4. 럭셔리 런타임 역할에서 이전에 CloudFormation 스택 출력에서 ​​기록한 IAM 역할을 선택합니다.
  5. 럭셔리 스크립트 위치, CloudFormation 스택 출력에서 ​​이전에 기록한 Python 스크립트에 대한 경로를 제공합니다.
  6. 섹션 펼치기 스파크 속성 선택하고 텍스트에서 편집
  7. 에 대한 경로를 제공하는 텍스트 상자에 다음 값을 입력합니다. redshift-connector, Amazon Redshift JDBC 드라이버, spark-avro 항아리, 그리고 minimal-json JAR 파일:
    --jars /usr/share/aws/redshift/jdbc/RedshiftJDBC.jar,/usr/share/aws/redshift/spark-redshift/lib/spark-redshift.jar,/usr/share/aws/redshift/spark-redshift/lib/spark-avro.jar,/usr/share/aws/redshift/spark-redshift/lib/minimal-json.jar

  8. 왼쪽 메뉴에서 작업 제출.
  9. 작업이 완료되고 실행 상태가 다음과 같이 표시될 때까지 기다립니다. Success.
  10. Amazon Redshift 쿼리 편집기로 이동하여 테이블이 성공적으로 생성되었는지 확인합니다.
  11. Amazon Redshift 쿼리 그룹에 대해 실행되는 푸시다운 쿼리 확인 emr-serverless-redshift. 데이터베이스에 대해 다음 SQL 문을 실행할 수 있습니다. dev:
    SELECT query_text FROM SYS_QUERY_HISTORY WHERE query_label = 'emr-serverless-redshift' ORDER BY start_time DESC LIMIT 1

푸시다운 쿼리와 반환 결과가 Amazon S3에 Parquet 파일 형식으로 저장되어 있는 것을 볼 수 있습니다.

AWS Glue에서 Apache Spark와 Amazon Redshift 통합 사용

AWS Glue 버전 4.0 이상부터 Amazon Redshift에 연결하는 Apache Spark 작업은 Apache Spark 및 Amazon Redshift JDBC 드라이버용 Amazon Redshift 통합을 사용할 수 있습니다. 이미 Amazon Redshift를 소스 또는 대상으로 사용하는 기존 AWS Glue 작업을 AWS Glue 4.0으로 업그레이드하여 이 새로운 커넥터를 활용할 수 있습니다. 이 게시물과 함께 제공된 CloudFormation 템플릿은 다음 AWS Glue 리소스를 생성합니다.

  • Amazon Redshift용 AWS Glue 연결 – Apache Spark용 Amazon Redshift 통합을 사용하여 AWS Glue에서 Amazon Redshift로 연결을 설정하기 위한 연결
  • AWS Glue 작업에 연결된 IAM 역할 – AWS Glue 작업 실행 권한을 관리하는 IAM 역할
  • AWS Glue 작업 – Apache Spark용 Amazon Redshift 통합을 사용하여 변환 및 집계를 수행하는 AWS Glue 작업용 스크립트

다음 예제에서는 PySpark와 함께 AWS Glue 작업에 연결된 AWS Glue 연결을 사용하며 다음 단계를 포함합니다.

  1. AWS Glue 콘솔에서 연결 탐색 창에서
  2. $XNUMX Million 미만 연결에서 CloudFormation 템플릿으로 생성된 Amazon Redshift용 AWS Glue 연결을 선택합니다.
  3. 연결 세부 정보를 확인합니다.

이제 작업 내에서 또는 여러 작업에서 이 연결을 재사용할 수 있습니다.

  1. 커넥터 페이지에서 아래의 CloudFormation 스택이 생성한 AWS Glue 작업을 선택합니다. 당신의 직업, 또는 키에 제공된 URL을 사용하여 AWS Glue 작업에 액세스합니다. GlueJob CloudFormation 스택 출력에서.
  2. AWS Glue 작업에 대한 스크립트에 액세스하고 확인합니다.
  3. 직업 세부 정보 탭, 확인 접착제 버전접착제 4.0.

이렇게 하면 작업이 최신 redshift-spark 커넥터.

  1. 펼치기 고급 속성 과의 연결 섹션에서 CloudFormation 스택에 의해 생성된 연결이 연결되었는지 확인합니다.
  2. AWS Glue 작업에 추가된 작업 파라미터를 확인합니다. 이러한 값은 CloudFormation 스택의 출력에서도 사용할 수 있습니다.
  3. 왼쪽 메뉴에서 찜하기 그리고 달리기.

작업 실행 상태를 볼 수 있습니다. 달리기 탭.

  1. 작업 실행이 성공적으로 완료되면 AWS Glue 작업에서 생성된 test-glue 테이블의 출력을 확인할 수 있습니다.
  2. Amazon Redshift 쿼리 그룹에 대해 실행되는 푸시다운 쿼리를 확인합니다. glue-redshift. 데이터베이스에 대해 다음 SQL 문을 실행할 수 있습니다. dev:
    SELECT query_text FROM SYS_QUERY_HISTORY WHERE query_label = 'glue-redshift' ORDER BY start_time DESC LIMIT 1

모범 사례

다음 모범 사례를 기억하십시오.

  • 다음을 사용하는 대신 Amazon EMR에서 Apache Spark용 Amazon Redshift 통합을 사용하는 것이 좋습니다. redshift-spark 새 Apache Spark 작업을 위한 커넥터(커뮤니티 버전).
  • 다음을 사용하는 기존 Apache Spark 작업이 있는 경우 redshift-spark 커넥터(커뮤니티 버전), Apache Spark용 Amazon Redshift 통합을 사용하도록 업그레이드하는 것이 좋습니다.
  • Apache Spark용 Amazon Redshift 통합은 조건자 및 쿼리 푸시다운을 자동으로 적용하여 성능을 최적화합니다. 지원되는 기능(autopushdown) 귀하의 쿼리에서. Apache Spark용 Amazon Redshift 통합은 함수를 SQL 쿼리로 변환하고 Amazon Redshift에서 쿼리를 실행합니다. 이 최적화 결과 필요한 데이터가 검색되므로 Apache Spark는 더 적은 데이터를 처리하고 더 나은 성능을 가질 수 있습니다.
    • 다음과 같은 집계 푸시다운 기능 사용을 고려하십시오. avg, count, max, minsum 데이터 처리를 위해 필터링된 데이터를 검색합니다.
    • 다음과 같은 부울 푸시다운 연산자 사용을 고려하십시오. in, isnull, isnotnull, contains, endswithstartswith 데이터 처리를 위해 필터링된 데이터를 검색합니다.
    • 다음과 같은 논리적 푸시다운 연산자 사용을 고려하십시오. and, ornot (또는 !) 데이터 처리를 위해 필터링된 데이터를 검색합니다.
  • 매개변수를 사용하여 IAM 역할을 전달하는 것이 좋습니다. aws_iam_role Amazon EMR 또는 AWS Glue의 Apache Spark 애플리케이션에서 Amazon Redshift 인증을 위해. IAM 역할에는 이 블로그의 "Apache Spark 애플리케이션에서 Apache Spark에 대한 Amazon Redshift 통합의 예" 섹션에 표시된 대로 Amazon Redshift에 인증하기 위해 임시 IAM 자격 증명을 검색하는 데 필요한 권한이 있어야 합니다.
  • 이 기능을 사용하면 비밀 관리자와 Amazon Redshift 데이터베이스에서 Amazon Redshift 사용자 이름과 암호를 유지 관리할 필요가 없습니다.
  • Amazon Redshift는 UNLOAD SQL 문을 사용하여 이 임시 데이터를 Amazon S3에 저장합니다. Apache Spark 애플리케이션은 임시 디렉터리(Parquet 파일 형식으로 저장됨)에서 결과를 검색합니다. Amazon S3의 이 임시 디렉터리는 자동으로 정리되지 않으므로 추가 비용이 발생할 수 있습니다. 사용을 권장합니다 Amazon S3 수명 주기 정책 S3 버킷에 대한 보관 규칙을 정의합니다.
  • 켜는 것이 좋습니다 Amazon Redshift 감사 로깅 데이터베이스의 연결 및 사용자 활동에 대한 정보를 기록합니다.
  • 켜는 것이 좋습니다 Amazon Redshift 미사용 암호화 Amazon Redshift가 데이터 센터에 기록할 때 데이터를 암호화하고 액세스할 때 해독합니다.
  • 즉시 사용할 수 있는 Apache Spark용 Amazon Redshift 통합을 사용하려면 AWS Glue v4.0 이상으로 업그레이드하는 것이 좋습니다. 이 버전의 AWS Glue로 업그레이드하면 이 기능이 자동으로 사용됩니다.
  • Apache Spark용 Amazon Redshift 통합을 사용하려면 Amazon EMR v6.9.0 이상으로 업그레이드하는 것이 좋습니다. 드라이버나 JAR 파일을 명시적으로 관리할 필요가 없습니다.
  • Amazon EMR Studio 노트북을 사용하여 Apache Spark 애플리케이션에서 Amazon Redshift 데이터와 상호 작용하는 것을 고려하십시오.
  • 시각적 인터페이스를 사용하여 Apache Spark 작업을 생성하려면 AWS Glue Studio를 사용하는 것이 좋습니다. AWS Glue Studio 내에서 Scala 또는 PySpark에서 Apache Spark 코드 작성으로 전환할 수도 있습니다.

정리

리소스를 더 이상 사용하지 않을 경우 요금이 청구되지 않도록 다음 단계를 완료하여 CloudFormation 템플릿의 일부로 생성된 리소스를 정리하십시오.

  1. Amazon EMR 서버리스 애플리케이션을 중지합니다.
    • 키에 대한 CloudFormation 스택 출력에 제공된 링크를 선택하거나 복사하여 Amazon EMR Studio에 액세스합니다. EMRStudioURL.
    • 왼쪽 메뉴에서 어플리케이션 아래에 서버리스 탐색 창에서

이름이 있는 CloudFormation 스택에서 생성된 EMR 애플리케이션을 찾을 수 있습니다. emr-spark-redshift.

    • 신청 상태가 중지됨으로 표시되면 다음 단계로 이동할 수 있습니다. 그러나 애플리케이션 상태가 시작됨이면 애플리케이션 이름을 선택한 다음 신청 중지신청 중지 다시 확인하십시오.
  1. Amazon EMR Studio 작업 공간을 삭제합니다.
    • 키에 대한 CloudFormation 스택 출력에 제공된 링크를 선택하거나 복사하여 Amazon EMR Studio에 액세스합니다. EMRStudioURL.
    • 왼쪽 메뉴에서 워크스페이스 탐색 창에서
    • 생성한 Workspace를 선택하고 선택합니다. .다음을 선택 . 다시 확인하십시오.
  2. CloudFormation 스택을 삭제합니다.
    • AWS CloudFormation 콘솔에서 이전에 생성한 스택으로 이동합니다.
    • 스택 이름을 선택한 다음 . 스택을 제거하고 이 게시물의 일부로 생성된 리소스를 삭제합니다.
    • 확인 화면에서 선택 스택 삭제.

결론

이 게시물에서는 Apache Spark용 Amazon Redshift 통합을 사용하여 Amazon EC2, Amazon EMR 서버리스 및 AWS Glue에서 Amazon EMR로 애플리케이션을 구축 및 배포하여 조건자 및 쿼리 푸시다운을 자동으로 적용하여 데이터 쿼리 성능을 최적화하는 방법을 설명했습니다. 아마존 레드시프트에서. Amazon EMR 또는 AWS Glue에서 Amazon Redshift에 원활하고 안전하게 연결하려면 Apache Spark용 Amazon Redshift 통합을 사용하는 것이 좋습니다.

다음은 Apache Spark용 Amazon Redshift 통합에 대한 고객의 의견입니다.

“우리는 엔지니어가 Python과 Scala를 사용하여 Apache Spark로 데이터 파이프라인과 애플리케이션을 구축할 수 있도록 지원합니다. 우리는 운영을 간소화하고 고객에게 더 빠르고 효율적으로 제공하는 맞춤형 솔루션을 원했고 Apache Spark를 위한 새로운 Amazon Redshift 통합으로 얻은 것입니다.”

—휴런 컨설팅

“GE Aerospace는 AWS 분석과 Amazon Redshift를 사용하여 중요한 비즈니스 결정을 내리는 중요한 비즈니스 통찰력을 제공합니다. Amazon S3의 자동 복사 지원으로 Amazon S3에서 Amazon Redshift로 데이터를 이동하는 더 간단한 데이터 파이프라인을 구축할 수 있습니다. 이는 데이터 제품 팀이 데이터에 액세스하고 최종 사용자에게 통찰력을 제공하는 능력을 가속화합니다. 데이터를 통해 가치를 추가하는 데 더 많은 시간을 할애하고 통합에 소요되는 시간은 줄었습니다.”

—GE 항공 우주

“우리의 초점은 Goldman Sachs의 모든 사용자에게 데이터에 대한 셀프 서비스 액세스를 제공하는 것입니다. 오픈 소스 데이터 관리 및 거버넌스 플랫폼인 Legend를 통해 사용자는 데이터 중심 애플리케이션을 개발하고 금융 서비스 산업 전반에서 협력하면서 데이터 기반 통찰력을 얻을 수 있습니다. Apache Spark용 Amazon Redshift 통합을 통해 데이터 플랫폼 팀은 최소한의 수동 단계로 Amazon Redshift 데이터에 액세스할 수 있으므로 제로 코드 ETL이 가능해 엔지니어가 작업 흐름을 완성하는 데 더 쉽게 집중할 수 있습니다. 그들은 완전하고 시의적절한 정보를 수집합니다. 이제 사용자가 Amazon Redshift에서 최신 데이터에 쉽게 액세스할 수 있으므로 애플리케이션의 성능이 향상되고 보안이 향상될 것으로 기대합니다.”

-골드만 삭스


저자에 관하여

가간 브라흐미 Amazon Web Services의 빅 데이터 분석 및 AI/ML 플랫폼에 중점을 둔 선임 전문 솔루션 설계자입니다. Gagan은 정보 기술 분야에서 18년 이상의 경력을 보유하고 있습니다. 그는 고객이 AWS에서 확장성과 성능이 뛰어나고 안전한 클라우드 기반 솔루션을 설계하고 구축하도록 돕습니다. 여가 시간에는 가족과 함께 시간을 보내고 새로운 장소를 탐험합니다.

비벡 고탐 AWS Professional Services에서 데이터 레이크를 전문으로 하는 데이터 설계자입니다. 그는 AWS에서 데이터 제품, 분석 플랫폼 및 솔루션을 구축하는 기업 고객과 함께 일합니다. 데이터 레이크를 구축하고 설계하지 않을 때 Vivek은 새로운 여행지를 탐험하고 하이킹을 가는 것을 좋아하는 음식 애호가입니다.

나레쉬 고탐 20년의 경험을 가진 AWS의 데이터 분석 및 AI/ML 리더로서 고객이 데이터 기반 의사 결정을 통해 고객의 역량을 강화할 수 있도록 고가용성, 고성능 및 비용 효율적인 데이터 분석 및 AI/ML 솔루션을 설계하도록 돕는 일을 즐깁니다. . 여가 시간에는 명상과 요리를 즐깁니다.

보 샤리피 Amazon Redshift 드라이버 팀의 소프트웨어 개발 엔지니어로 Amazon Redshift Integration with Apache Spark 커넥터 개발을 이끌고 있습니다. 그는 여러 산업 분야에서 데이터 기반 플랫폼을 구축한 경력이 20년이 넘습니다. 여가 시간에는 가족과 함께 시간을 보내고 서핑을 즐깁니다.

타임 스탬프 :

더보기 AWS 빅 데이터