데이터 레이크 이외의 테이블을 Iceberg 테이블로 마이그레이션하려면 어떻게 해야 합니까?

3분 분량
0

데이터 레이크 이외의 테이블을 Apache Iceberg 테이블로 마이그레이션하려고 합니다.

간략한 설명

강력한 데이터 레이크 아키텍처를 사용하면 다양한 데이터 소스를 단일 위치로 통합하여 쉽게 액세스할 수 있습니다. 따라서 기존 데이터 웨어하우스 시스템의 데이터 관리 도구와 ACID 트랜잭션을 사용하여 비용을 절감할 수 있습니다.

해결 방법

Iceberg 테이블은 인플레이스 마이그레이션과 섀도우 마이그레이션이라는 두 가지 유형의 마이그레이션을 지원합니다. 자세한 내용은 Iceberg 웹사이트에서 인플레이스 마이그레이션 및 섀도우 마이그레이션을 참조하십시오.

Iceberg 구성으로 Apache Spark 세션 초기화

AWS Glue에서 새 노트북을 생성합니다. 노트북을 생성할 때 올바른 권한과 함께 AWS Identity and Access Management(IAM) 역할을 사용하십시오.

다음 단계를 완료합니다.

  1. AWS Glue 콘솔에 로그인합니다.
  2. 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를 사용하십시오.

  1. 소스 테이블과 동일한 구조의 빈 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)
  2. 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)
  3. 데이터 파일이 여전히 소스 위치의 이전 데이터 파일을 가리키는지 확인합니다. 새 위치에 생성된 메타데이터 파일만 Iceberg 테이블에 속합니다.

    query = f"""
    
    SELECT file_path FROM glue_catalog.dbname.target_iceberg_tablename.files
    
    """
    
    spark.sql(query).show(10, truncate=False)

섀도우 마이그레이션을 사용하여 데이터 레이크 이외의 테이블 이동

섀도우 마이그레이션 프로세스는 소스 테이블의 데이터를 다시 작성합니다. 마이그레이션 중에 데이터를 검증할 수 있습니다. 또한 각 구성에 대해 새 테이블을 생성하여 다양한 구성을 테스트할 수도 있습니다.

이 유형의 마이그레이션에서는 충돌을 방지하기 위해 대상 데이터 파일을 소스 데이터 파일과 다른 위치에 배치합니다. 또한 이 프로세스를 통해 롤백을 사용하고 대상 테이블을 삭제하여 문제를 신속하게 복구할 수 있습니다.

테이블을 마이그레이션하려면 다음 단계를 수행하십시오.

  1. 기존 테이블의 데이터를 사용하여 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)
  2. 데이터 파일이 새 위치로 마이그레이션되었는지 확인합니다. 새 위치에 생성된 메타데이터 파일은 Iceberg 테이블에 속합니다.

    query = f"""
    SELECT file_path FROM glue_catalog.dbname.target_iceberg_tablename.files
    """
    spark.sql(query).show(10, truncate=False)

관련 정보

AWS Glue에서 Iceberg 프레임워크 사용

AWS 공식
AWS 공식업데이트됨 3달 전