Tous les produits
Search
Centre de documentation

Data Lake Formation:Accéder aux tables Iceberg de DLF depuis Spark EMR sur ECS

Dernière mise à jour :Sep 18, 2026

Cette rubrique explique comment accéder aux tables Iceberg de Data Lake Formation (DLF) depuis Spark EMR sur ECS en utilisant le runtime Iceberg Spark open source via le catalogue REST Iceberg.

Prérequis

  • Exigences de version : Cluster EMR version 5.12.0 ou ultérieure avec le composant Spark 3. Spark doit utiliser JDK 17 (requis par Iceberg 1.11.0 ; configurez-le comme indiqué dans Utiliser JDK 11 dans Spark 3).

  • Exigences de région : Le cluster EMR et DLF doivent se trouver dans la même région, et le VPC du cluster doit être ajouté à la liste d'autorisation de DLF.

  • Exigences d'autorisations : Vous devez disposer d'une paire AccessKey autorisée à accéder à DLF, et l'utilisateur RAM correspondant doit avoir reçu des autorisations de données sur le catalogue cible. Pour plus d'informations, consultez Gérer les autorisations de données.

Dépendances

Seuls les deux artefacts communautaires Apache Iceberg suivants provenant de Maven Central sont requis :

  • iceberg-spark-runtime-3.5_2.12 (1.11.0 et versions ultérieures)

  • iceberg-aws-bundle (1.11.0 et versions ultérieures)

Utilisez l'indicateur --packages pour télécharger automatiquement les dépendances lors de la soumission d'un job (voir l'exemple ci-dessous). Pour les clusters hors ligne, téléchargez les fichiers JAR et placez-les dans $SPARK_HOME/jars.

Exemple d'utilisation

Configurer une connexion au catalogue

Exécutez la commande spark-sql dans un terminal. Remplacez les espaces réservés par vos valeurs réelles.

spark-sql \
  --master local \
  --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.11.0,org.apache.iceberg:iceberg-aws-bundle:1.11.0 \
  --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
  --conf spark.sql.catalog.iceberg_catalog=org.apache.iceberg.spark.SparkCatalog \
  --conf spark.sql.catalog.iceberg_catalog.catalog-impl=org.apache.iceberg.rest.RESTCatalog \
  --conf spark.sql.catalog.iceberg_catalog.uri=http://${regionID}-vpc.dlf.aliyuncs.com/iceberg \
  --conf spark.sql.catalog.iceberg_catalog.warehouse=${catalogName} \
  --conf spark.sql.catalog.iceberg_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO \
  --conf spark.sql.catalog.iceberg_catalog.rest.auth.type=sigv4 \
  --conf spark.sql.catalog.iceberg_catalog.rest.auth.sigv4.delegate-auth-type=none \
  --conf spark.sql.catalog.iceberg_catalog.rest.signing-region=${regionID} \
  --conf spark.sql.catalog.iceberg_catalog.rest.signing-name=DlfNext \
  --conf spark.sql.catalog.iceberg_catalog.rest.access-key-id=${AccessKeyId} \
  --conf spark.sql.catalog.iceberg_catalog.rest.secret-access-key=${AccessKeySecret}

Le tableau suivant décrit les éléments de configuration :

Élément de configuration

Description

Exemple

uri

Endpoint VPC du service REST Iceberg de DLF, au format http://<regionID>-vpc.dlf.aliyuncs.com/iceberg. Pour plus d'informations, consultez Point d'accès au service

http://cn-hangzhou-vpc.dlf.aliyuncs.com/iceberg

warehouse

Nom du catalogue

iceberg_test

catalog-impl

Valeur fixe : org.apache.iceberg.rest.RESTCatalog

org.apache.iceberg.rest.RESTCatalog

io-impl

Implémentation standard de la communauté Iceberg. Valeur fixe : org.apache.iceberg.aws.s3.S3FileIO

org.apache.iceberg.aws.s3.S3FileIO

rest.auth.type

Type d'authentification. Valeur fixe : sigv4

sigv4

rest.auth.sigv4.delegate-auth-type

Valeur fixe : none

none

rest.signing-region

ID de région DLF

cn-hangzhou

rest.signing-name

Valeur fixe : DlfNext

DlfNext

rest.access-key-id

AccessKey ID utilisé pour accéder à DLF

rest.secret-access-key

AccessKeySecret utilisé pour accéder à DLF

Lire et écrire dans les tables Iceberg de DLF

Une fois le démarrage effectué, utilisez Spark SQL standard pour lire et écrire des données :

CREATE DATABASE IF NOT EXISTS iceberg_catalog.db;
CREATE TABLE iceberg_catalog.db.iceberg_tbl (id BIGINT, name STRING) USING iceberg;
INSERT INTO iceberg_catalog.db.iceberg_tbl VALUES (1, 'hello'), (2, 'world');
SELECT * FROM iceberg_catalog.db.iceberg_tbl;