아이스버그 델(Dell) 통합

아이스버그 델(Dell) 통합 (Iceberg Dell Integration)

이 문서에서는 아이스버그와 Dell의 엔터프라이즈 객체 스토리지(Enterprise Object Storage, ECS)를 함께 사용하는 방법을 알려드릴게요. 0.15.0 버전부터 ECS 카탈로그를 사용해서 델 ECS를 아이스버그와 연동할 수 있어요. 필요한 설정 파라미터와 스파크·플링크 예시, 그리고 주의할 제약 사항까지 차례로 살펴볼게요.

출처: 문서

본문

델 ECS 통합 (Dell ECS Integration)

아이스버그는 0.15.0 버전부터 ECS 카탈로그를 사용해서 Dell의 엔터프라이즈 객체 스토리지(ECS)와 함께 사용할 수 있어요.

Dell ECS에 대한 자세한 정보는 Dell ECS 문서를 참고해주세요.

파라미터 (Parameters)

아이스버그와 함께 Dell ECS를 사용할 때 다음 구성 파라미터가 필요해요.

이름 설명
ecs.s3.endpoint ECS S3 서비스 엔드포인트
ecs.s3.access-key-id ECS 사용자 이름
ecs.s3.secret-access-key S3 비밀 키
warehouse 데이터와 메타데이터의 위치

warehouse는 다음 형식을 사용해야 해요.

예시 설명
ecs://bucket-a 전체 버킷을 데이터로 사용
ecs://bucket-a/ 전체 버킷을 데이터로 사용. 마지막 /는 무시돼요.
ecs://bucket-a/namespace-a 특정 네임스페이스의 데이터만 접근하는 데 프리픽스 사용

아이스버그 런타임 jar는 다양한 버전의 스파크와 플링크를 지원해요. 올바른 버전을 선택해야 해요.

Dell ECS 클라이언트 jar는 하위 호환이 되지만, Dell EMC는 여전히 최신 버전의 클라이언트 사용을 권장해요.

스파크 (Spark)

Spark 3.5.0과 함께 Dell ECS 카탈로그를 사용하려면 다음과 같이 스파크 세션을 만들어야 해요.

ICEBERG_VERSION=1.4.2
SPARK_VERSION=3.5_2.12
ECS_CLIENT_VERSION=3.3.2

DEPENDENCIES="org.apache.iceberg:iceberg-spark-runtime-${SPARK_VERSION}:${ICEBERG_VERSION},\
org.apache.iceberg:iceberg-dell:${ICEBERG_VERSION},\
com.emc.ecs:object-client-bundle:${ECS_CLIENT_VERSION}"

spark-sql --packages ${DEPENDENCIES} \
    --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
    --conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \
    --conf spark.sql.catalog.my_catalog.warehouse=ecs://bucket-a/namespace-a \
    --conf spark.sql.catalog.my_catalog.catalog-impl=org.apache.iceberg.dell.ecs.EcsCatalog \
    --conf spark.sql.catalog.my_catalog.ecs.s3.endpoint=http://10.x.x.x:9020 \
    --conf spark.sql.catalog.my_catalog.ecs.s3.access-key-id=<Your-ecs-s3-access-key> \
    --conf spark.sql.catalog.my_catalog.ecs.s3.secret-access-key=<Your-ecs-s3-secret-access-key>

그런 다음 my_catalog를 사용해서 ECS의 데이터에 접근해요. SHOW NAMESPACES IN my_catalog와 SHOW TABLES IN my_catalog를 사용하면 카탈로그의 네임스페이스와 테이블을 가져올 수 있어요.

카탈로그 사용과 관련된 문제들:

  1. SparkSession.catalog는 Python과 Scala 모두에서 스파크의 3rd-party 카탈로그에 접근하지 않아요. 그러니 DDL SQL을 사용해서 모든 테이블과 네임스페이스를 나열해주세요.

Flink에서 Dell ECS 카탈로그를 사용하려면 먼저 Flink 환경을 만들어야 해요.

# HADOOP_HOME is your hadoop root directory after unpack the binary package.
export HADOOP_CLASSPATH=`$HADOOP_HOME/bin/hadoop classpath`

# download Iceberg dependency
MAVEN_URL=https://repo1.maven.org/maven2
ICEBERG_VERSION=0.15.0
FLINK_VERSION=1.14
wget ${MAVEN_URL}/org/apache/iceberg/iceberg-flink-runtime-${FLINK_VERSION}/${ICEBERG_VERSION}/iceberg-flink-runtime-${FLINK_VERSION}-${ICEBERG_VERSION}.jar
wget ${MAVEN_URL}/org/apache/iceberg/iceberg-dell/${ICEBERG_VERSION}/iceberg-dell-${ICEBERG_VERSION}.jar

# download ECS object client
ECS_CLIENT_VERSION=3.3.2
wget ${MAVEN_URL}/com/emc/ecs/object-client-bundle/${ECS_CLIENT_VERSION}/object-client-bundle-${ECS_CLIENT_VERSION}.jar

# open the SQL client.
/path/to/bin/sql-client.sh embedded \
    -j iceberg-flink-runtime-${FLINK_VERSION}-${ICEBERG_VERSION}.jar \
    -j iceberg-dell-${ICEBERG_VERSION}.jar \
    -j object-client-bundle-${ECS_CLIENT_VERSION}.jar \
    shell

그런 다음 Flink SQL을 사용해서 my_catalog라는 카탈로그를 만들어요.

CREATE CATALOG my_catalog WITH (
    'type'='iceberg',
    'warehouse' = 'ecs://bucket-a/namespace-a',
    'catalog-impl'='org.apache.iceberg.dell.ecs.EcsCatalog',
    'ecs.s3.endpoint' = 'http://10.x.x.x:9020',
    'ecs.s3.access-key-id' = '<Your-ecs-s3-access-key>',
    'ecs.s3.secret-access-key' = '<Your-ecs-s3-secret-access-key>');

그런 다음 USE CATALOG my_catalog, SHOW DATABASES, SHOW TABLES를 실행해서 카탈로그의 네임스페이스와 테이블을 가져올 수 있어요.

제약 사항 (Limitations)

Dell ECS에서만 카탈로그를 사용할 때는 다음 제약 사항을 주의해야 해요.

  1. RENAME 문은 별다른 보호 장치 없이 지원돼요. 테이블 이름을 바꿀 때는 원본 테이블에서 모든 커밋이 완료됐음을 보장해야 해요.
  2. RENAME 문은 데이터 파일을 옮기지 않고 테이블 이름만 바꿔요. 그래서 테이블 데이터가 설정된 warehouse 경로 밖에 저장될 수 있어요.
  3. 테이블 커밋에 사용되는 CAS 연산은 객체의 체크섬(checksum)을 기반으로 해요. 체크섬 충돌 가능성이 아주 아주 작게 존재해요.

더 알아보기 (Learn more)