쿠키 기본 설정 선택

당사는 사이트와 서비스를 제공하는 데 필요한 필수 쿠키 및 유사한 도구를 사용합니다. 고객이 사이트를 어떻게 사용하는지 파악하고 개선할 수 있도록 성능 쿠키를 사용해 익명의 통계를 수집합니다. 필수 쿠키는 비활성화할 수 없지만 '사용자 지정' 또는 ‘거부’를 클릭하여 성능 쿠키를 거부할 수 있습니다.

사용자가 동의하는 경우 AWS와 승인된 제3자도 쿠키를 사용하여 유용한 사이트 기능을 제공하고, 사용자의 기본 설정을 기억하고, 관련 광고를 비롯한 관련 콘텐츠를 표시합니다. 필수가 아닌 모든 쿠키를 수락하거나 거부하려면 ‘수락’ 또는 ‘거부’를 클릭하세요. 더 자세한 내용을 선택하려면 ‘사용자 정의’를 클릭하세요.

Spark와 함께 Iceberg 클러스터 사용 - Amazon EMR

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Spark와 함께 Iceberg 클러스터 사용

Amazon EMR 버전 6.5.0부터 부트스트랩 작업을 포함할 필요 없이 Spark 클러스터에서 Iceberg를 사용할 수 있습니다. Amazon EMR 버전 6.4.0 이하 버전의 경우 부트스트랩 작업을 사용하여 필요한 모든 종속 항목을 사전 설치할 수 있습니다.

이 자습서에서는 AWS CLI 를 사용하여 Amazon EMR Spark 클러스터에서 Iceberg로 작업합니다. 콘솔을 사용하여 Iceberg가 설치된 클러스터를 생성하려면 Build an Apache Iceberg data lake using Amazon Athena, Amazon EMR, and AWS Glue의 단계를 수행합니다.

Iceberg 클러스터 생성

AWS Management Console AWS CLI 또는 Amazon EMR API를 사용하여 Iceberg가 설치된 클러스터를 생성할 수 있습니다. 이 자습서에서는 AWS CLI 를 사용하여 Amazon EMR 클러스터에서 Iceberg로 작업합니다. 콘솔을 사용하여 Iceberg가 설치된 클러스터를 생성하려면 Build an Apache Iceberg data lake using Amazon Athena, Amazon EMR, and AWS Glue의 단계를 수행합니다.

와 함께 Amazon EMR에서 Iceberg를 사용하려면 AWS CLI먼저 다음 단계를 사용하여 클러스터를 생성합니다. 를 사용하여 Iceberg 분류를 지정하는 방법에 대한 자세한 내용은 클러스터를 생성할 AWS CLI 때를 사용하여 구성 제공 또는 섹션을 AWS CLI참조하세요클러스터를 생성할 때 Java SDK를 사용하여 구성 제공.

  1. 다음 콘텐츠가 포함된 configurations.json 파일을 생성합니다.

    [{ "Classification":"iceberg-defaults", "Properties":{"iceberg.enabled":"true"} }]
  2. 그리고 다음 구성을 사용하여 클러스터를 생성합니다. 예제 Amazon S3 버킷 경로와 서브넷 ID를 사용자 정보로 교체합니다.

    aws emr create-cluster --release-label emr-6.5.0 \ --applications Name=Spark \ --configurations file://iceberg_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_V2 \ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,SubnetId=subnet-1234567890abcdef0

또는 Spark 애플리케이션을 포함하는 Amazon EMR 클러스터를 생성하고 /usr/share/aws/iceberg/lib/iceberg-spark3-runtime.jar 파일을 Spark 작업에 JAR 종속 항목으로 포함할 수 있습니다. 자세한 내용은 애플리케이션 제출을 참조하세요.

jar를 Spark 작업에 종속 항목으로 포함하려면 Spark 애플리케이션에 다음 구성 속성을 추가합니다.

--conf "spark.jars=/usr/share/aws/iceberg/lib/iceberg-spark3-runtime.jar"

Spark 작업 종속성에 대한 자세한 내용은 Apache Spark 설명서 Running Spark on Kubernetes에서 Dependency Management를 참조하세요.

Iceberg용 Spark 세션 초기화

다음 예제에서는 대화식 Spark 쉘을 시작하거나 Spark 제출을 사용하거나 Amazon EMR에서 Iceberg를 작업하기 위해 Amazon EMR Notebooks를 사용하는 방법을 보여줍니다.

spark-shell
  1. SSH를 사용하여 마스터 노드에 연결합니다. 자세한 내용은 Amazon EMR 관리 안내서에서 SSH를 사용하여 프라이머리 노드에 연결을 참조하세요.

  2. Spark 셸을 시작하려면 다음 명령을 입력합니다. PySpark 쉘을 사용하려면 spark-shellpyspark로 바꿉니다.

    spark-shell \ --conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.my_catalog.warehouse=s3://amzn-s3-demo-bucket/prefix/ --conf spark.sql.catalog.my_catalog.type=glue \ --conf spark.sql.defaultCatalog=my_catalog \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions
spark-submit
  1. SSH를 사용하여 마스터 노드에 연결합니다. 자세한 내용은 Amazon EMR 관리 안내서에서 SSH를 사용하여 프라이머리 노드에 연결을 참조하세요.

  2. Iceberg용 Spark 세션을 시작하려면 다음 명령을 입력합니다.

    spark-submit \ --conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.my_catalog.warehouse=s3://amzn-s3-demo-bucket1/prefix \ --conf spark.sql.catalog.my_catalog.type=glue \ --conf spark.sql.defaultCatalog=my_catalog \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions
EMR Studio notebooks

EMR Studio 노트북을 사용하여 Spark 세션을 초기화하려면 다음 예제와 같이 Amazon EMR Notebooks에서 %%configure 매직 명령을 사용하여 Spark 세션을 구성합니다. 자세한 내용은 Amazon EMR 관리 안내서에서 EMR Notebooks 매직 사용을 참조하세요.

%%configure -f{ "conf":{ "spark.sql.catalog.my_catalog":"org.apache.iceberg.spark.SparkCatalog", "spark.sql.catalog.my_catalog.type":"glue", "spark.sql.catalog.my_catalog.warehouse":"s3://amzn-s3-demo-bucket1/prefix/", "spark.sql.defaultCatalog", "my_catalog", "spark.sql.extensions":"org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" } }
CLI

CLI를 사용하여 Spark 클러스터를 초기화하고 모든 Spark Iceberg 세션 기본 구성을 설정하려면 다음 샘플을 실행합니다. AWS CLI 및 Amazon EMR API를 사용하여 구성 분류를 지정하는 방법에 대한 자세한 내용은 애플리케이션 구성을 참조하세요.

[ { "Classification": "spark-defaults", "Properties": { "spark.sql.catalog.my_catalog":"org.apache.iceberg.spark.SparkCatalog", "spark.sql.catalog.my_catalog.type":"glue", "spark.sql.catalog.my_catalog.warehouse":"s3://amzn-s3-demo-bucket1/prefix/", "spark.sql.defaultCatalog", "my_catalog", "spark.sql.extensions":"org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" } } ]
  1. SSH를 사용하여 마스터 노드에 연결합니다. 자세한 내용은 Amazon EMR 관리 안내서에서 SSH를 사용하여 프라이머리 노드에 연결을 참조하세요.

  2. Spark 셸을 시작하려면 다음 명령을 입력합니다. PySpark 쉘을 사용하려면 spark-shellpyspark로 바꿉니다.

    spark-shell \ --conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.my_catalog.warehouse=s3://amzn-s3-demo-bucket/prefix/ --conf spark.sql.catalog.my_catalog.type=glue \ --conf spark.sql.defaultCatalog=my_catalog \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions

Iceberg 테이블에 쓰기

다음 예제에서는 Spark DataFrame을 생성하고 Iceberg 데이터 세트로 쓰는 방법을 보여줍니다. 이 예제에서는 SSH를 기본 hadoop 사용자로 사용하여 프라이머리 노드에 연결되어 있는 동안 Spark 쉘을 통해 데이터 세트를 작업하는 방법을 보여줍니다.

참고

코드 샘플을 Spark 쉘에 붙여넣으려면 프롬프트에 :paste를 입력하고 예제를 붙여넣은 다음 CTRL+D를 누릅니다.

PySpark

Spark에는 Python 기반 쉘(pyspark)이 포함되어 있으며, 이 쉘을 사용하여 Python에서 작성된 Spark 프로그램을 시제품화할 수 있습니다. 프라이머리 노드에서 pyspark를 간접 호출합니다.

## Create a DataFrame. data = spark.createDataFrame([ ("100", "2015-01-01", "2015-01-01T13:51:39.340396Z"), ("101", "2015-01-01", "2015-01-01T12:14:58.597216Z"), ("102", "2015-01-01", "2015-01-01T13:51:40.417052Z"), ("103", "2015-01-01", "2015-01-01T13:51:40.519832Z") ],["id", "creation_date", "last_update_time"]) ## Write a DataFrame as a Iceberg dataset to the Amazon S3 location. spark.sql("""CREATE TABLE IF NOT EXISTS dev.db.iceberg_table (id string, creation_date string, last_update_time string) USING iceberg location 's3://amzn-s3-demo-bucket/example-prefix/db/iceberg_table'""") data.writeTo("dev.db.iceberg_table").append()
Scala
import org.apache.spark.sql.SaveMode import org.apache.spark.sql.functions._ // Create a DataFrame. val data = Seq( ("100", "2015-01-01", "2015-01-01T13:51:39.340396Z"), ("101", "2015-01-01", "2015-01-01T12:14:58.597216Z"), ("102", "2015-01-01", "2015-01-01T13:51:40.417052Z"), ("103", "2015-01-01", "2015-01-01T13:51:40.519832Z") ).toDF("id", "creation_date", "last_update_time") // Write a DataFrame as a Iceberg dataset to the Amazon S3 location. spark.sql("""CREATE TABLE IF NOT EXISTS dev.db.iceberg_table (id string, creation_date string, last_update_time string) USING iceberg location 's3://amzn-s3-demo-bucket/example-prefix/db/iceberg_table'""") data.writeTo("dev.db.iceberg_table").append()

Spark에는 Python 기반 쉘(pyspark)이 포함되어 있으며, 이 쉘을 사용하여 Python에서 작성된 Spark 프로그램을 시제품화할 수 있습니다. 프라이머리 노드에서 pyspark를 간접 호출합니다.

## Create a DataFrame. data = spark.createDataFrame([ ("100", "2015-01-01", "2015-01-01T13:51:39.340396Z"), ("101", "2015-01-01", "2015-01-01T12:14:58.597216Z"), ("102", "2015-01-01", "2015-01-01T13:51:40.417052Z"), ("103", "2015-01-01", "2015-01-01T13:51:40.519832Z") ],["id", "creation_date", "last_update_time"]) ## Write a DataFrame as a Iceberg dataset to the Amazon S3 location. spark.sql("""CREATE TABLE IF NOT EXISTS dev.db.iceberg_table (id string, creation_date string, last_update_time string) USING iceberg location 's3://amzn-s3-demo-bucket/example-prefix/db/iceberg_table'""") data.writeTo("dev.db.iceberg_table").append()

Iceberg 테이블에서 읽기

PySpark
df = spark.read.format("iceberg").load("dev.db.iceberg_table") df.show()
Scala
val df = spark.read.format("iceberg").load("dev.db.iceberg_table") df.show()
Spark SQL
SELECT * from dev.db.iceberg_table LIMIT 10
df = spark.read.format("iceberg").load("dev.db.iceberg_table") df.show()

Spark Iceberg에서 AWS Glue 데이터 카탈로그 사용

Spark Iceberg에서 AWS Glue 데이터 카탈로그에 연결할 수 있습니다. 이 섹션에서는 서로 다른 연결 명령을 보여줍니다.

기본 리전의 기본 AWS Glue 카탈로그에 연결

이 샘플은 Glue 카탈로그 유형을 사용하여 연결하는 방법을 보여줍니다. 카탈로그 ID를 지정하지 않으면 기본값을 사용합니다.

spark-submit \ --conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.my_catalog.warehouse=s3://amzn-s3-demo-bucket1/prefix \ --conf spark.sql.catalog.my_catalog.type=glue \ --conf spark.sql.defaultCatalog=my_catalog \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions

특정 카탈로그 ID를 사용하여 AWS Glue 카탈로그에 연결

이 샘플은 카탈로그 ID를 사용하여 연결하는 방법을 보여줍니다.

spark-submit \ --conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.my_catalog.warehouse=s3://amzn-s3-demo-bucket1/prefix \ --conf spark.sql.catalog.my_catalog.type=glue \ --conf spark.sql.catalog.my_catalog.glue.id=AWS Glue catalog ID \ --conf spark.sql.defaultCatalog=my_catalog \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions

이 명령은 다른 계정의 AWS Glue 카탈로그, RMS 카탈로그 또는 페더레이션 카탈로그에 연결하는 데 사용할 수 있습니다.

Spark Iceberg에서 Iceberg REST 카탈로그(IRC) 사용

다음 섹션에서는 카탈로그와 Iceberg 통합을 구성하는 방법을 자세히 설명합니다.

AWS Glue Data Catalog IRC 엔드포인트에 연결

다음은 Iceberg REST를 사용하기 위한 샘플 spark-submit 명령을 보여줍니다.

spark-submit \ --conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.my_catalog.warehouse=glue catalog ID \ --conf spark.sql.catalog.my_catalog.type=rest \ --conf spark.sql.catalog.my_catalog.uri=glue endpoint URI/iceberg \ --conf spark.sql.catalog.my_catalog.rest.sigv4-enabled=true \ --conf spark.sql.catalog.my_catalog.rest.signing-name=glue \ --conf spark.sql.defaultCatalog=my_catalog \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions

런타임 역할이 활성화된 클러스터에서 사용하려면 다음과 같은 추가 스파크 구성 설정이 필요합니다.

"spark.hadoop.fs.s3.credentialsResolverClass": "software.amazon.glue.GlueTableCredentialsResolver", "spark.hadoop.catalog-impl": "org.apache.iceberg.aws.glue.GlueCatalog", "spark.hadoop.glue.id": glue catalog ID "spark.hadoop.glue.endpoint": "glue endpoint"

각 리전의 AWS Glue 엔드포인트 URL 목록은 AWS Glue 엔드포인트 및 할당량을 참조하세요.

임의의 IRC 엔드포인트에 연결

다음은 IRC 엔드포인트를 사용하기 위한 샘플 spark-submit 명령을 보여줍니다.

spark-submit \ --conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.my_catalog.warehouse=warehouse name \ --conf spark.sql.catalog.my_catalog.type=rest \ --conf spark.sql.catalog.my_catalog.uri=your rest endpoint \ --conf spark.sql.defaultCatalog=my_catalog \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions

Iceberg SparkCatalog와 SparkSessionCatalog를 사용할 때의 구성 차이

Iceberg는 Spark Iceberg 카탈로그를 생성하는 두 가지 방법을 제공합니다. Spark 구성을 SparkCatalog 또는 로 설정할 수 있습니다SparkSessionCatalog.

Iceberg SparkCatalog 사용

다음은 Spark Iceberg 카탈로그로 SparkCatalog를 사용하기 위한 명령을 보여줍니다.

spark-shell \ --conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.my_catalog.warehouse=s3://amzn-s3-demo-bucket1/prefix \ --conf spark.sql.catalog.my_catalog.type=glue \ --conf spark.sql.defaultCatalog=my_catalog

이 접근 방식에 대한 고려 사항:

  • Iceberg 테이블에는 액세스할 수 있지만 다른 테이블은 액세스할 수 없습니다.

  • 카탈로그 이름은 spark_catalog일 수 없습니다. Spark의 초기 카탈로그 이름입니다. 항상 Hive 메타스토어에 연결됩니다. 사용자가를 사용하여 덮어쓰지 않는 한 Spark의 기본 카탈로그입니다spark.sql.defaultCatalog.

  • spark.sql.defaultCatalog를 카탈로그 이름으로 설정하여 이를 기본 카탈로그로 만들 수 있습니다.

Iceberg SparkSessionCatalog 사용

다음은 SparkSessionCatalog를 Spark Iceberg 카탈로그로 사용하기 위한 명령을 보여줍니다.

spark-shell \ --conf spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkSessionCatalog \ --conf spark.sql.catalog.spark_catalog.warehouse=s3://amzn-s3-demo-bucket1/prefix \ --conf spark.sql.catalog.spark_catalog.type=glue

이 접근 방식에 대한 고려 사항:

Iceberg Spark 확장 사용

Iceberg는 사용자가 Spark 확장 구성을 통해 설정할 수 org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions 있는 Spark 확장을 제공합니다spark.sql.extensions. 확장을 통해 행 수준 DELETE, UPDATE 및 MERGE와 같은 주요 Iceberg 기능, 압축, 스냅샷 만료, 분기 및 태깅 등과 같은 Iceberg별 Spark 데이터 정의 언어 문 및 절차가 활성화됩니다. 자세한 내용은 다음을 참조하세요.

Spark에서 Iceberg 사용 시 고려 사항

프라이버시사이트 이용 약관쿠키 기본 설정
© 2025, Amazon Web Services, Inc. 또는 계열사. All rights reserved.