기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
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를 사용하여 구성 제공.
-
다음 콘텐츠가 포함된
configurations.json
파일을 생성합니다.[{ "Classification":"iceberg-defaults", "Properties":{"iceberg.enabled":"true"} }]
-
그리고 다음 구성을 사용하여 클러스터를 생성합니다. 예제 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
Iceberg용 Spark 세션 초기화
다음 예제에서는 대화식 Spark 쉘을 시작하거나 Spark 제출을 사용하거나 Amazon EMR에서 Iceberg를 작업하기 위해 Amazon EMR Notebooks를 사용하는 방법을 보여줍니다.
-
SSH를 사용하여 마스터 노드에 연결합니다. 자세한 내용은 Amazon EMR 관리 안내서에서 SSH를 사용하여 프라이머리 노드에 연결을 참조하세요.
-
Spark 셸을 시작하려면 다음 명령을 입력합니다. PySpark 쉘을 사용하려면
spark-shell
을pyspark
로 바꿉니다.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
를 누릅니다.
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 테이블에서 읽기
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는 해당 테이블이 Hive 메타스토어의 테이블인지 확인합니다. 자세한 내용은 AWS Glue 데이터 카탈로그를 Hive의 카탈로그로 사용을 참조하세요.
카탈로그 이름은 spark_catalog여야 합니다.
Iceberg Spark 확장 사용
Iceberg는 사용자가 Spark 확장 구성을 통해 설정할 수 org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions
있는 Spark 확장을 제공합니다spark.sql.extensions
. 확장을 통해 행 수준 DELETE, UPDATE 및 MERGE와 같은 주요 Iceberg 기능, 압축, 스냅샷 만료, 분기 및 태깅 등과 같은 Iceberg별 Spark 데이터 정의 언어 문 및 절차가 활성화됩니다. 자세한 내용은 다음을 참조하세요.
Iceberg Spark 쓰기 확장: Spark 쓰기
Iceberg Spark DDL 확장: ALTER TABLE SQL 확장
Iceberg Spark 프로시저 확장: Spark 프로
시저
Spark에서 Iceberg 사용 시 고려 사항
-
Amazon EMR 6.5.0에서는 기본적으로 Amazon EMR on EKS에서 실행되는 Iceberg를 지원하지 않습니다. Amazon EMR 6.5.0 사용자 지정 이미지를 사용할 수 있으므로 Amazon EMR on EKS에서 Iceberg 테이블을 생성하기 위해
--jars local:///usr/share/aws/iceberg/lib/iceberg-spark3-runtime.jar
을spark-submit
파라미터로 전달할 수 있습니다. 자세한 내용은 Amazon EMR on EKS 개발 안내서에서 사용자 지정 이미지를 사용하여 Amazon EMR에서 Spark 워크로드 제출을 참조하세요. 지원 에 지원을 문의할 수도 있습니다. Amazon EMR 6.6.0부터 Amazon EMR on EKS에서 Iceberg가 지원됩니다. -
AWS Glue를 Iceberg의 카탈로그로 사용하는 경우 테이블을 생성하는 데이터베이스가 AWS Glue에 있는지 확인합니다. AWS Lake Formation 와 같은 서비스를 사용하고 있고 카탈로그를 로드할 수 없는 경우 명령을 실행하기 위해 서비스에 대한 적절한 액세스 권한이 있는지 확인합니다.
에 설명된 대로 Iceberg SparkSessionCatalog를 사용하는 경우 Spark Iceberg AWS Glue 데이터 카탈로그 설정을 구성하는 것 외에도 Glue 데이터 카탈로그를 Apache Hive 메타스토어로 구성에 설명된 구성 단계를 따라야 Iceberg SparkCatalog와 SparkSessionCatalog를 사용할 때의 구성 차이합니다. AWS