Tous les produits
Search
Centre de documentation

E-MapReduce:Utilisation de base

Dernière mise à jour :Aug 09, 2026

Apache Iceberg sur EMR permet d'exécuter des opérations INSERT, SELECT, UPDATE et DELETE sur des données tabulaires stockées dans OSS, avec des métadonnées gérées par Data Lake Formation (DLF). Cette rubrique explique comment configurer un catalogue Iceberg basé sur DLF et exécuter des opérations Spark SQL de base sur un cluster Hadoop.

Prérequis

Avant de commencer, vérifiez que vous disposez des éléments suivants :

Limitations

Les extensions Spark SQL d'Iceberg ne sont pas prises en charge avec Spark 2.4. Sur les clusters exécutant EMR V3.38.X ou une version ultérieure, utilisez l'API Spark DataFrame plutôt que Spark SQL pour interagir avec Iceberg. Cette rubrique décrit l'approche Spark SQL pour EMR V5.3.0 et les versions ultérieures.

Configurer le catalogue Iceberg

Avant d'exécuter Spark SQL sur Iceberg, configurez un catalogue pointant vers DLF en tant que magasin de métadonnées. Le nom du catalogue et les paramètres requis varient selon la version du cluster. Toutes les configurations utilisent la même extension Spark SQL :

org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions

La configuration du catalogue est préfixée par spark.sql.catalog.<catalog_name>, où <catalog_name> correspond au nom attribué au catalogue.

Résumé des versions :

Version du cluster Nom du catalogue par défaut **Classe catalog-impl**
EMR V5.6.0 ou ultérieur iceberg org.apache.iceberg.aliyun.dlf.hive.DlfCatalog
EMR V5.5.X dlf org.apache.iceberg.aliyun.dlf.hive.DlfCatalog
EMR V5.3.X à V5.4.X dlf_catalog org.apache.iceberg.aliyun.dlf.DlfCatalog

EMR V5.6.0 ou ultérieur

Connectez-vous à votre cluster via SSH, puis exécutez la commande suivante :

spark-sql --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
 --conf spark.sql.catalog.iceberg=org.apache.iceberg.spark.SparkCatalog \
 --conf spark.sql.catalog.iceberg.catalog-impl=org.apache.iceberg.aliyun.dlf.hive.DlfCatalog \

EMR V5.5.X

Connectez-vous à votre cluster via SSH, puis exécutez la commande suivante :

spark-sql --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
 --conf spark.sql.catalog.dlf=org.apache.iceberg.spark.SparkCatalog \
 --conf spark.sql.catalog.dlf.catalog-impl=org.apache.iceberg.aliyun.dlf.hive.DlfCatalog \
 --conf spark.sql.catalog.dlf.warehouse=<your-oss-warehouse-path> \
Vous pouvez laisser le paramètre spark.sql.catalog.dlf.warehouse vide. Si ce paramètre est omis, le chemin d'entrepôt par défaut est utilisé.

EMR V5.3.X à V5.4.X

Cette version nécessite une paire de clés AccessKey. Définissez les variables d'environnement ALIBABA_CLOUD_ACCESS_KEY_ID et ALIBABA_CLOUD_ACCESS_KEY_SECRET avant d'exécuter la commande. Pour plus d'instructions, consultez la page Configurer les variables d'environnement sous Linux, macOS et Windows.

Connectez-vous à votre cluster via SSH, puis exécutez la commande suivante :

spark-sql --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
 --conf spark.sql.catalog.dlf_catalog=org.apache.iceberg.spark.SparkCatalog \
 --conf spark.sql.catalog.dlf_catalog.catalog-impl=org.apache.iceberg.aliyun.dlf.DlfCatalog \
 --conf spark.sql.catalog.dlf_catalog.io-impl=org.apache.iceberg.hadoop.HadoopFileIO \
 --conf spark.sql.catalog.dlf_catalog.oss.endpoint=<your-oss-endpoint> \
 --conf spark.sql.catalog.dlf_catalog.warehouse=<your-oss-warehouse-path> \
 --conf spark.sql.catalog.dlf_catalog.access.key.id=<ALIBABA_CLOUD_ACCESS_KEY_ID> \
 --conf spark.sql.catalog.dlf_catalog.access.key.secret=<ALIBABA_CLOUD_ACCESS_KEY_SECRET> \
 --conf spark.sql.catalog.dlf_catalog.dlf.catalog-id=<your-catalog-id> \
 --conf spark.sql.catalog.dlf_catalog.dlf.endpoint=<your-dlf-endpoint> \
 --conf spark.sql.catalog.dlf_catalog.dlf.region-id=<your-dlf-region-id>

Remplacez les espaces réservés par vos valeurs réelles :

Espace réservé Description
<your-oss-endpoint> Point de terminaison OSS de votre région, par exemple oss-cn-hangzhou.aliyuncs.com
<your-oss-warehouse-path> Chemin OSS où Iceberg stocke les données de table, par exemple oss://my-bucket/warehouse
<ALIBABA_CLOUD_ACCESS_KEY_ID> Valeur de la variable d'environnement ALIBABA_CLOUD_ACCESS_KEY_ID
<ALIBABA_CLOUD_ACCESS_KEY_SECRET> Valeur de la variable d'environnement ALIBABA_CLOUD_ACCESS_KEY_SECRET
<your-catalog-id> ID du catalogue DLF
<your-dlf-endpoint> Point de terminaison du service DLF
<your-dlf-region-id> ID de la région où DLF est déployé, par exemple cn-hangzhou

Vérifier la session

Lorsque l'interface CLI Spark SQL est prête, l'invite de commande devient :

spark-sql>

Exécuter des opérations Iceberg de base

Les exemples ci-dessous utilisent <catalog_name> pour désigner le nom du catalogue configuré. Pour EMR V5.6.0 et les versions ultérieures, remplacez <catalog_name> par iceberg. Pour les autres versions, utilisez le nom du catalogue indiqué dans la section Configurer le catalogue Iceberg.

Créer une base de données

CREATE DATABASE IF NOT EXISTS <catalog_name>.iceberg_db;

Créer une table

La forme de base spécifie les noms et types de colonnes, ainsi que le moteur de stockage Iceberg :

CREATE TABLE IF NOT EXISTS <catalog_name>.iceberg_db.sample(
    id BIGINT COMMENT 'unique id',
    data STRING
)
USING iceberg;

La commande CREATE TABLE prend également en charge les clauses COMMENT, PARTITIONED BY, LOCATION et TBLPROPERTIES. Utilisez TBLPROPERTIES pour définir des propriétés au niveau de la table, telles que le format d'écriture par défaut :

CREATE TABLE IF NOT EXISTS <catalog_name>.iceberg_db.sample(
    id BIGINT COMMENT 'unique id',
    data STRING
)
USING iceberg
TBLPROPERTIES (
    'write.format.default'='parquet'
);

Insérer des données

INSERT INTO <catalog_name>.iceberg_db.sample VALUES (1, 'a'), (2, 'b'), (3, 'c');

Interroger des données

SELECT * FROM <catalog_name>.iceberg_db.sample;
SELECT count(1) AS count, data FROM <catalog_name>.iceberg_db.sample GROUP BY data;

Mettre à jour des données

UPDATE <catalog_name>.iceberg_db.sample SET data = 'x' WHERE id = 3;

Supprimer des données

DELETE FROM <catalog_name>.iceberg_db.sample WHERE id = 3;

Rubriques connexes