Tous les produits
Search
Centre de documentation

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

Dernière mise à jour :Aug 11, 2026

Cette rubrique explique comment accéder aux tables Data Lake Formation (DLF) Iceberg depuis EMR on ECS Spark 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 décrit dans Utiliser JDK 11 dans Spark 3).

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

  • Exigences en matière d'autorisations : Vous devez disposer d'une paire AccessKey autorisée à accéder à DLF. L'utilisateur RAM correspondant doit recevoir 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 extraire automatiquement les dépendances lors de la soumission d'une tâche (voir l'exemple suivant). 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 présente 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 DLF Iceberg

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;