存储

Dell ECS

师成师成· 更新于 2026-09-28· 阅读 8 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

Iceberg Dell 集成

Dell ECS 集成

从 0.15.0 开始,Iceberg 可以通过 ECS catalog 与 Dell 的企业级对象存储(ECS)配合使用。

有关 Dell ECS 的更多信息,请参阅 Dell ECS。

参数

在 Iceberg 中使用 Dell ECS 时,需要以下配置参数:

名称说明
ecs.s3.endpointECS S3 服务端点
ecs.s3.access-key-idECS 用户名
ecs.s3.secret-access-keyS3 密钥
warehouse数据和元数据的位置

warehouse 应使用以下格式:

示例说明
ecs://bucket-a将整个存储桶用作数据
ecs://bucket-a/将整个存储桶用作数据。末尾的 / 会被忽略。
ecs://bucket-a/namespace-a使用前缀仅访问该特定命名空间中的数据

Iceberg 的 runtime jar 支持不同版本的 Spark 和 Flink,请选择正确的版本。

尽管 Dell ECS 客户端 jar 向后兼容,Dell EMC 仍建议使用最新版本的客户端。

Spark

要在 Spark 3.5.0 中使用 Dell ECS catalog,应按如下方式创建 Spark 会话:

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 来获取该 catalog 的命名空间和表。

关于 catalog 使用的相关问题:

  1. SparkSession.catalog 在 Python 和 Scala 中都无法访问 Spark 的第三方 catalog,因此请使用 DDL SQL 来列出所有表和命名空间。

Flink

要在 Flink 中使用 Dell ECS catalog,你首先必须创建一个 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 的 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 来获取该目录的命名空间和表。

限制

当仅将该目录与 Dell ECS 配合使用时,需要注意以下限制:

  1. RENAME 语句在没有其他保护机制的情况下也受支持。当你尝试重命名表时,需要确保原表上的所有提交均已完成。
  2. RENAME 语句仅重命名表,而不会移动任何数据文件。这可能导致表的数据存储在配置的仓库路径之外的路径中。
  3. 表提交所使用的 CAS 操作基于对象的校验和(checksum)。校验和发生冲突的概率非常小。

评论

登录后参与评论

正在加载评论…