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 |
|
|
Endpoint VPC du service REST Iceberg de DLF, au format |
|
|
|
Nom du catalogue |
|
|
|
Valeur fixe : |
|
|
|
Implémentation standard de la communauté Iceberg. Valeur fixe : |
|
|
|
Type d'authentification. Valeur fixe : |
|
|
|
Valeur fixe : |
|
|
|
ID de région DLF |
|
|
|
Valeur fixe : |
|
|
|
AccessKey ID utilisé pour accéder à DLF |
|
|
|
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;