Amazon EMR로 Amazon S3 테이블 접근하기
Amazon EMR로 Amazon S3 테이블 접근하기 (Accessing Amazon S3 tables with Amazon EMR)
Amazon EMR(이전의 Amazon Elastic MapReduce)은 AWS에서 Apache Hadoop, Apache Spark 같은 빅데이터 프레임워크를 실행해 방대한 양의 데이터를 처리·분석하기 쉽게 해주는 관리형 클러스터 플랫폼이에요. 이런 프레임워크와 관련 오픈 소스 프로젝트를 사용해 분석 목적과 비즈니스 인텔리전스 워크로드용 데이터를 처리할 수 있어요. Amazon EMR을 사용하면 대량의 데이터를 다른 AWS 데이터 스토어와 데이터베이스로 변환·이동할 수도 있어요.
출처: 문서
본문
Amazon EMR의 Apache Iceberg 클러스터를 사용해 Spark 세션에서 테이블 버킷에 연결해 S3 테이블로 작업할 수 있어요. Amazon EMR에서 테이블 버킷에 연결할 때는 AWS Glue Data Catalog를 통한 AWS 분석 서비스 통합을 쓰거나, 오픈 소스인 Amazon S3 Tables Catalog for Apache Iceberg 클라이언트 카탈로그를 사용할 수 있어요.
참고: S3 Tables는 Amazon EMR 7.5 이상 버전에서 지원돼요.
Amazon EMR Iceberg 클러스터의 Spark로 S3 테이블 버킷 연결하기
이 절차에서는 Apache Iceberg용으로 구성된 Amazon EMR 클러스터를 설정한 다음, 테이블 버킷에 연결하는 Spark 세션을 시작해요. AWS Glue를 통한 AWS 분석 서비스 통합을 쓰거나, 오픈 소스인 Amazon S3 Tables Catalog for Apache Iceberg 클라이언트 카탈로그를 사용할 수 있어요. 클라이언트 카탈로그에 대한 정보는 "Accessing tables using the Amazon S3 Tables Iceberg REST endpoint" 문서를 참고하세요.
Amazon EMR에서 테이블을 쓰는 방법을 다음 옵션 중에서 고르세요.
Amazon S3 Tables Catalog for Apache Iceberg
Amazon S3 Tables Catalog for Apache Iceberg를 사용해 Amazon EMR의 Spark로 테이블을 쿼리하려면 다음 사전 조건이 필요해요.
클라이언트 카탈로그 JAR의 최신 버전은 s3-tables-catalog GitHub 저장소를 참고하세요.
사전 조건
- Amazon EMR에 사용하는 IAM 역할에
AmazonS3TablesFullAccess정책을 연결해요.
Spark로 테이블을 쿼리하도록 Amazon EMR 클러스터를 설정하려면:
- 다음 구성으로 클러스터를 만들어요. 이 예시를 사용할 때는 사용자 입력 자리표시자를 자신의 정보로 바꾸세요.
aws emr create-cluster --release-label emr-7.5.0 \ --applications Name=Spark \ --configurations file://configurations.json \ --region us-east-1 \ --name My_Spark_Iceberg_Cluster \ --log-uri s3://amzn-s3-demo-bucket/ \ --instance-type m5.xlarge \ --instance-count 2 \ --service-role EMR_DefaultRole \ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,SubnetId=subnet-1234567890abcdef0,KeyName=my-key-pairconfigurations.json:[ { "Classification":"iceberg-defaults", "Properties": { "iceberg.enabled":"true"} }] - SSH로 Spark 기본 노드에 연결해요.
- 테이블 버킷에 연결하는 Iceberg용 Spark 세션을 초기화하려면 다음 명령을 입력해요. 사용자 입력 자리표시자를 자신의 테이블 버킷 ARN으로 바꾸세요.
spark-shell \ --packages software.amazon.s3tables:s3-tables-catalog-for-iceberg-runtime:0.1.8 \ --conf spark.sql.catalog.s3tablesbucket=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.s3tablesbucket.catalog-impl=software.amazon.s3tables.iceberg.S3TablesCatalog \ --conf spark.sql.catalog.s3tablesbucket.warehouse=arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-bucket1 \ --conf spark.sql.defaultCatalog=s3tablesbucket \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions - Spark SQL로 테이블을 쿼리해요. 예시 쿼리는 "Querying S3 tables with Spark SQL" 문서를 참고하세요.
AWS 분석 서비스 통합
AWS 분석 서비스 통합을 사용해 Amazon EMR의 Spark로 테이블을 쿼리하려면 다음 사전 조건이 필요해요.
사전 조건
- 테이블 버킷을 AWS 분석 서비스와 통합해요.
- Amazon EMR용 기본 서비스 역할(
EMR_DefaultRole_V2)을 만들어요. 자세한 내용은 "Service role for Amazon EMR (EMR role)" 문서를 참고하세요. - Amazon EMR용 Amazon EC2 인스턴스 프로파일(
EMR_EC2_DefaultRole)을 만들어요. 자세한 내용은 "Service role for cluster EC2 instances (EC2 instance profile)" 문서를 참고하세요.EMR_EC2_DefaultRole에AmazonS3TablesFullAccess정책을 연결해요.
Spark로 테이블을 쿼리하도록 Amazon EMR 클러스터를 설정하려면:
- 다음 구성으로 클러스터를 만들어요. 이 예시를 사용할 때는 사용자 입력 자리표시자 값을 자신의 정보로 바꾸세요.
aws emr create-cluster --release-label emr-7.5.0 \ --applications Name=Spark \ --configurations file://configurations.json \ --region us-east-1 \ --name My_Spark_Iceberg_Cluster \ --log-uri s3://amzn-s3-demo-bucket/ \ --instance-type m5.xlarge \ --instance-count 2 \ --service-role EMR_DefaultRole \ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,SubnetId=subnet-1234567890abcdef0,KeyName=my-key-pairconfigurations.json:[ { "Classification":"iceberg-defaults", "Properties": { "iceberg.enabled":"true"} }] - SSH로 Spark 기본 노드에 연결해요.
- 테이블에 연결하는 Iceberg용 Spark 세션을 초기화하려면 다음 명령을 입력해요. 리전, 계정 ID, 테이블 버킷 이름의 사용자 입력 자리표시자를 자신의 정보로 바꾸세요.
spark-shell \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \ --conf spark.sql.defaultCatalog=s3tables \ --conf spark.sql.catalog.s3tables=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.s3tables.catalog-impl=org.apache.iceberg.aws.glue.GlueCatalog \ --conf spark.sql.catalog.s3tables.client.region=us-east-1 \ --conf spark.sql.catalog.s3tables.glue.id=111122223333:s3tablescatalog/amzn-s3-demo-table-bucket - Spark SQL로 테이블을 쿼리해요. 예시 쿼리는 "Querying S3 tables with Spark SQL" 문서를 참고하세요.
참고: Amazon EMR에서
DROP TABLE PURGE명령을 사용하는 경우:
- Amazon EMR 7.5 – Spark 구성
spark.sql.catalog.<your-catalog-name>.cache-enabled를false로 설정해요. 이 구성이true로 설정되어 있으면 테이블 캐시가 활성화되지 않도록 새 세션이나 애플리케이션에서 명령을 실행해요.- Amazon EMR 7.5보다 높은 버전 –
DROP TABLE은 지원되지 않아요. 테이블을 삭제하려면 S3 TablesDeleteTableREST API를 사용할 수 있어요.
더 알아보기 (Learn more)
- Amazon Redshift (Amazon Redshift)
- Quick (Quick)