Amazon EMR을 사용하여 Amazon S3 테이블에 액세스
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 클라이언트 카탈로그를 사용할 수 있습니다.
Amazon EMR Iceberg 클러스터에서 Spark를 사용하여 S3 테이블 버킷에 연결
이 절차에서는 Apache Iceberg에 대해 구성된 Amazon EMR 클러스터를 설정한 다음 테이블 버킷에 연결하는 Spark 세션을 시작합니다. AWS Glue를 통한 AWS 분석 서비스 통합을 사용하여 이를 설정하거나 오픈 소스 Amazon S3 Tables Catalog for Apache Iceberg 클라이언트 카탈로그를 사용할 수 있습니다. 클라이언트 카탈로그에 대한 자세한 내용은 Amazon S3 Tables Iceberg REST 엔드포인트를 사용하여 테이블에 액세스 섹션을 참조하세요.
다음 옵션 중에서 Amazon EMR에서 테이블을 사용하는 방법을 선택합니다.
- Amazon S3 Tables Catalog for Apache Iceberg
-
Amazon S3 Tables Catalog for Apache Iceberg를 사용하여 Amazon EMR에서 Spark로 테이블을 쿼리하려면 다음 사전 조건을 충족해야 합니다.
Spark를 사용하여 테이블을 쿼리하도록 Amazon EMR 클러스터를 설정하는 방법
다음 구성을 사용하여 클러스터를 생성합니다. 이 예제를 사용하려면 user input placeholders
를 사용자의 정보로 대체합니다.
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-pair
configurations.json
:
[{
"Classification":"iceberg-defaults",
"Properties":{"iceberg.enabled":"true"}
}]
-
SSH를 사용하여 Spark 프라이머리 노드에 연결합니다.
-
테이블 버킷에 연결하는 Iceberg에 대한 Spark 세션을 초기화하려면 다음 명령을 입력합니다. user input placeholders
를 테이블 버킷 ARN으로 바꿉니다.
spark-shell \
--packages software.amazon.s3tables:s3-tables-catalog-for-iceberg-runtime:0.1.3 \
--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을 사용하여 테이블을 쿼리합니다. 예시 쿼리는 Spark SQL을 사용하여 S3 테이블 쿼리 섹션을 참조하세요.
- AWS analytics services integration
-
AWS 분석 서비스 통합을 사용하여 Amazon EMR에서 Spark를 사용하여 테이블을 쿼리하려면 다음 사전 조건을 충족해야 합니다.
Spark를 사용하여 테이블을 쿼리하도록 Amazon EMR 클러스터를 설정하는 방법
다음 구성을 사용하여 클러스터를 생성합니다. 이 예제를 사용하려면 user input placeholder
값을 사용자의 정보로 대체합니다.
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-pair
configurations.json
:
[{
"Classification":"iceberg-defaults",
"Properties":{"iceberg.enabled":"true"}
}]
-
SSH를 사용하여 Spark 프라이머리 노드에 연결합니다.
-
다음 명령을 입력하여 테이블에 연결하는 Iceberg에 대한 Spark 세션을 초기화합니다. user
input placeholders
를 사용자의 정보로 대체합니다.
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
-
Spark SQL을 사용하여 테이블을 쿼리합니다. 예시 쿼리는 Spark SQL을 사용하여 S3 테이블 쿼리 섹션을 참조하세요.
Amazon EMR에서 DROP TABLE PURGE
명령을 사용하는 경우:
Amazon EMR 버전 7.5
Spark 구성 spark.sql.catalog.your-catalog-name
.cache-enabled
를 false
로 설정합니다. 이 구성이 true
로 설정된 경우 테이블 캐시가 활성화되지 않도록 새 세션 또는 애플리케이션에서 명령을 실행합니다.
-
7.5보다 높은 Amazon EMR 버전
DROP TABLE
는 지원되지 않습니다. S3 Tables DeleteTable
REST API를 사용하여 테이블을 삭제할 수 있습니다.