데이터 레이크 이외의 테이블을 Apache Iceberg 테이블로 마이그레이션하려고 합니다.
간략한 설명
강력한 데이터 레이크 아키텍처를 사용하면 다양한 데이터 소스를 단일 위치로 통합하여 쉽게 액세스할 수 있습니다. 따라서 기존 데이터 웨어하우스 시스템의 데이터 관리 도구와 ACID 트랜잭션을 사용하여 비용을 절감할 수 있습니다.
해결 방법
Iceberg 테이블은 인플레이스 마이그레이션과 섀도우 마이그레이션이라는 두 가지 유형의 마이그레이션을 지원합니다. 자세한 내용은 Iceberg 웹사이트에서 인플레이스 마이그레이션 및 섀도우 마이그레이션을 참조하십시오.
Iceberg 구성으로 Apache Spark 세션 초기화
AWS Glue에서 새 노트북을 생성합니다. 노트북을 생성할 때 올바른 권한과 함께 AWS Identity and Access Management(IAM) 역할을 사용하십시오.
다음 단계를 완료합니다.
- AWS Glue 콘솔에 로그인합니다.
- Glue 노트북을 만들고 다음 파라미터를 구성합니다.
%glue_version 4.0
%idle_timeout 60
%number_of_workers 5
%worker_type G.1X
%%configure
{
"--conf": "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions",
"--datalake-formats": "iceberg"
}
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.config(f"spark.sql.catalog.glue_catalog", "org.apache.iceberg.spark.SparkCatalog") \
.config(f"spark.sql.catalog.glue_catalog.warehouse","s3://bucket_name/prefix/") \
.config(f"spark.sql.catalog.glue_catalog.catalog-impl", "org.apache.iceberg.aws.glue.GlueCatalog") \
.config(f"spark.sql.catalog.glue_catalog.io-impl", "org.apache.iceberg.aws.s3.S3FileIO") \
.getOrCreate()
인플레이스 마이그레이션을 사용하여 데이터 레이크 이외의 테이블 이동
인플레이스 마이그레이션은 소스 테이블의 데이터 파일을 그대로 두고 해당 데이터 파일을 새 Iceberg 테이블에 추가합니다. 이 프로세스는 대상 테이블의 메타데이터만 생성합니다. 마이그레이션 중에 오류가 발생하면 메타데이터만 다시 작성하면 되고 데이터 파일 자체는 다시 쓰지 않아도 됩니다.
테이블을 마이그레이션하려면 다음 단계를 수행하십시오.
참고: Parquet 데이터에는 add_files를 사용하십시오.
-
소스 테이블과 동일한 구조의 빈 Iceberg 테이블을 생성합니다.
query = f"""
CREATE TABLE IF NOT EXISTS glue_catalog.dbname.target_iceberg_tablename USING iceberg LOCATION 's3://bucket_name/prefix/' AS
SELECT * FROM dbname.source_tablename LIMIT 0
"""
spark.sql(query)
-
add_files 프로시저를 실행합니다.
query = f"""
CALL glue_catalog.system.add_files(table => 'dbname.target_iceberg_tablename', source_table => 'dbname.source_tablename')
"""
spark.sql(query).show(truncate=False)
-
데이터 파일이 여전히 소스 위치의 이전 데이터 파일을 가리키는지 확인합니다. 새 위치에 생성된 메타데이터 파일만 Iceberg 테이블에 속합니다.
query = f"""
SELECT file_path FROM glue_catalog.dbname.target_iceberg_tablename.files
"""
spark.sql(query).show(10, truncate=False)
섀도우 마이그레이션을 사용하여 데이터 레이크 이외의 테이블 이동
섀도우 마이그레이션 프로세스는 소스 테이블의 데이터를 다시 작성합니다. 마이그레이션 중에 데이터를 검증할 수 있습니다. 또한 각 구성에 대해 새 테이블을 생성하여 다양한 구성을 테스트할 수도 있습니다.
이 유형의 마이그레이션에서는 충돌을 방지하기 위해 대상 데이터 파일을 소스 데이터 파일과 다른 위치에 배치합니다. 또한 이 프로세스를 통해 롤백을 사용하고 대상 테이블을 삭제하여 문제를 신속하게 복구할 수 있습니다.
테이블을 마이그레이션하려면 다음 단계를 수행하십시오.
-
기존 테이블의 데이터를 사용하여 Iceberg 테이블을 만듭니다.
query = f"""
CREATE TABLE IF NOT EXISTS glue_catalog.dbname.target_iceberg_tablename USING iceberg LOCATION 's3://bucket_name/prefix/' AS
SELECT * FROM dbname.source_tablename
"""
spark.sql(query).show(truncate=False)
-
데이터 파일이 새 위치로 마이그레이션되었는지 확인합니다. 새 위치에 생성된 메타데이터 파일은 Iceberg 테이블에 속합니다.
query = f"""
SELECT file_path FROM glue_catalog.dbname.target_iceberg_tablename.files
"""
spark.sql(query).show(10, truncate=False)
관련 정보
AWS Glue에서 Iceberg 프레임워크 사용