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 |
|
|
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 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;