Le composant facultatif Iceberg vous permet de gérer les tables de data lakehouse avec des transactions ACID et l'évolution du schéma sur les clusters Managed Service pour Apache Spark. Vous pouvez installer Iceberg lors de la création du cluster à l'aide de la fonctionnalité Composants facultatifs pour interroger et mettre à jour des tables dans les charges de travail Spark et Hive.
Principales fonctionnalités d'Iceberg
Les fonctionnalités d'Iceberg sont les suivantes :
- Évolution du schéma : ajoutez, supprimez ou renommez des colonnes sans réécrire l'intégralité de la table.
- Remontée dans le temps : interrogez les instantanés de table historiques à des fins d'audit ou de rollback.
- Partitionnement masqué : optimisez la disposition des données pour accélérer les requêtes sans exposer les détails des partitions aux utilisateurs.
- Transactions ACID : garantissez la cohérence des données et évitez les conflits.
Propriétés liées à Iceberg
Lorsque vous créez un cluster Managed Service pour Apache Spark avec Iceberg, les propriétés Spark et Hive suivantes sont configurées pour fonctionner avec Iceberg.
Version d'image 2.x
Les propriétés Spark et Hive suivantes sont configurées sur les clusters Managed Service pour Apache Spark 2.x lorsque le composant Iceberg est installé :
| Fichier de configuration | Propriété | Valeur par défaut |
|---|---|---|
/etc/spark/conf/spark-defaults.conf |
spark.sql.extensions |
org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions |
spark.driver.extraClassPath |
/usr/lib/iceberg/lib/iceberg-spark-runtime-spark-version_scala-version.jar |
|
spark.executor.extraClassPath |
/usr/lib/iceberg/lib/iceberg-spark-runtime-spark-version_scala-version.jar |
|
/etc/hive/conf/hive-site.xml |
hive.aux.jars.path |
file:///usr/lib/iceberg/lib/iceberg-hive-runtime.jar |
iceberg.engine.hive.enabled |
true |
Version d'image 3.0
Les propriétés Spark et Hive suivantes sont configurées sur les clusters Managed Service pour Apache Spark 3.0 lorsque le composant Iceberg est installé :
| Fichier de configuration | Propriété | Valeur par défaut |
|---|---|---|
/etc/spark/conf/spark-defaults.conf |
spark.sql.extensions |
org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions |
spark.sql.catalog.default_iceberg |
org.apache.iceberg.spark.SparkCatalog |
|
spark.sql.catalog.default_iceberg.type |
rest |
|
spark.sql.catalog.default_iceberg.uri |
env:ICEBERG_REST_CATALOG_URI |
|
/etc/hive/conf/hive-site.xml |
iceberg.engine.hive.enabled |
true |
Installer le composant facultatif Iceberg
Vous pouvez installer le composant Iceberg sur les clusters Managed Service pour Apache Spark créés avec les versions d'image 2.2.47 et ultérieures. Les pages de la liste des versions d'image de cluster Managed Service pour Apache Spark indiquent la version du composant Iceberg incluse dans les dernières versions d'image de cluster Managed Service pour Apache Spark.
ConsoleGoogle Cloud
Pour créer un cluster Managed Service pour Apache Spark qui installe le composant Iceberg, procédez comme suit dans la console Google Cloud :
- Ouvrez la page Créer un cluster.
- Cliquez sur Configuration supplémentaire pour développer cette section.
- Modifiez les composants facultatifs.
- Dans le panneau qui s'ouvre, cochez la case Iceberg.
- Cliquez sur Enregistrer.
gcloud CLI
Pour créer un cluster Managed Service pour Apache Spark qui installe le composant Iceberg, utilisez la commande gcloud dataproc clusters create avec l'option --optional-components.
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --optional-components=ICEBERG \ other flags ...
Remplacez les éléments suivants :
- CLUSTER_NAME : nouveau nom du cluster.
- REGION : région du cluster
API REST
Pour créer un cluster Managed Service pour Apache Spark qui installe le composant facultatif Iceberg, spécifiez le SoftwareConfig.Component Iceberg dans une requête clusters.create.
Utiliser des tables Iceberg avec Spark et Hive
Après avoir créé un cluster Managed Service pour Apache Spark sur lequel le composant facultatif Iceberg est installé, vous pouvez utiliser Spark et Hive pour lire et écrire des données de table Iceberg.
Spark
Configurer une session Spark pour Iceberg
Vous pouvez utiliser la commande gcloud CLI localement, ou les REPL (Read-Eval-Print Loops) spark-shell ou pyspark exécutés sur le nœud maître du cluster Dataproc pour activer les extensions Spark d'Iceberg et configurer le catalogue Spark pour utiliser les tables Iceberg.
gcloud
Exécutez l'exemple de gcloud CLI suivant dans une fenêtre de terminal locale ou dans Cloud Shell pour envoyer un job Spark et définir les propriétés Spark afin de configurer la session Spark pour Iceberg.
gcloud dataproc jobs submit spark \ --cluster=CLUSTER_NAME \ --region=REGION \ --properties="spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" \ --properties="spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog" \ --properties="spark.sql.catalog.CATALOG_NAME.type=hadoop" \ --properties="spark.sql.catalog.CATALOG_NAME.warehouse=gs://BUCKET/FOLDER" \ other flags ...
Remplacez les éléments suivants :
- CLUSTER_NAME : nom du cluster.
- REGION : région Compute Engine.
- CATALOG_NAME : nom du catalogue Iceberg.
- BUCKET et FOLDER : emplacement du catalogue Iceberg dans Cloud Storage.
spark-shell
Pour configurer une session Spark pour Iceberg à l'aide de la boucle REPL spark-shell sur le cluster Managed Service pour Apache Spark, procédez comme suit :
Utilisez SSH pour vous connecter au nœud maître du cluster Managed Service pour Apache Spark.
Exécutez la commande suivante dans le terminal de la session SSH pour configurer la session Spark pour Iceberg.
spark-shell \
--conf "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" \
--conf "spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog" \
--conf "spark.sql.catalog.CATALOG_NAME.type=hadoop" \
--conf "spark.sql.catalog.CATALOG_NAME.warehouse=gs://BUCKET/FOLDER"
Remplacez les éléments suivants :
- CLUSTER_NAME : nom du cluster.
- REGION : région Compute Engine.
- CATALOG_NAME : nom du catalogue Iceberg.
- BUCKET et FOLDER : emplacement du catalogue Iceberg dans Cloud Storage.
shell pyspark
Pour configurer une session Spark pour Iceberg à l'aide de la boucle REPL pyspark sur le cluster Managed Service pour Apache Spark, procédez comme suit :
Utilisez SSH pour vous connecter au nœud maître du cluster Managed Service pour Apache Spark.
Exécutez la commande suivante dans le terminal de la session SSH pour configurer la session Spark pour Iceberg :
pyspark \
--conf "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" \
--conf "spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog" \
--conf "spark.sql.catalog.CATALOG_NAME.type=hadoop" \
--conf "spark.sql.catalog.CATALOG_NAME.warehouse=gs://BUCKET/FOLDER"
Remplacez les éléments suivants :
- CLUSTER_NAME : nom du cluster.
- REGION : région Compute Engine.
- CATALOG_NAME : nom du catalogue Iceberg.
- BUCKET et FOLDER : emplacement du catalogue Iceberg dans Cloud Storage.
Écrire des données dans une table Iceberg
Vous pouvez écrire des données dans une table Iceberg à l'aide de Spark. Les extraits de code suivants créent un DataFrame avec des données échantillonnées, créent une table Iceberg dans Cloud Storage, puis écrivent les données dans la table Iceberg.
PySpark
# Create a DataFrame with sample data.
data = spark.createDataFrame([(1, "Alice"), (2, "Bob")], ["id", "name"])
# Create an Iceberg table in Cloud Storage.
spark.sql("""CREATE TABLE IF NOT EXISTS CATALOG_NAME.NAMESPACE.TABLE_NAME (
id integer,
name string)
USING iceberg
LOCATION 'gs://BUCKET/FOLDER/NAMESPACE/TABLE_NAME'""")
# Write the DataFrame to the Iceberg table in Cloud Storage.
data.writeTo("CATALOG_NAME.NAMESPACE.TABLE_NAME").append()
Scala
// Create a DataFrame with sample data.
val data = Seq((1, "Alice"), (2, "Bob")).toDF("id", "name")
// Create an Iceberg table in Cloud Storage.
spark.sql("""CREATE TABLE IF NOT EXISTS CATALOG_NAME.NAMESPACE.TABLE_NAME (
id integer,
name string)
USING iceberg
LOCATION 'gs://BUCKET/FOLDER/NAMESPACE/TABLE_NAME'""")
// Write the DataFrame to the Iceberg table in Cloud Storage.
data.writeTo("CATALOG_NAME.NAMESPACE.TABLE_NAME").append()
Lire des données à partir d'une table Iceberg
Vous pouvez lire les données d'une table Iceberg à l'aide de Spark. Les extraits de code suivants lisent la table, puis affichent son contenu.
PySpark
# Read Iceberg table data into a DataFrame.
df = spark.read.format("iceberg").load("CATALOG_NAME.NAMESPACE.TABLE_NAME")
# Display the data.
df.show()
Scala
// Read Iceberg table data into a DataFrame.
val df = spark.read.format("iceberg").load("CATALOG_NAME.NAMESPACE.TABLE_NAME")
// Display the data.
df.show()
Spark SQL
SELECT * FROM CATALOG_NAME.NAMESPACE.TABLE_NAME
Hive
Créer une table Iceberg dans Hive
Les clusters Managed Service pour Apache Spark préconfigurent Hive pour qu'il fonctionne avec Iceberg.
Pour exécuter les extraits de code de cette section, procédez comme suit :
Utilisez SSH pour vous connecter au nœud maître de votre cluster Managed Service pour Apache Spark.
Affichez
beelinedans la fenêtre de terminal SSH.beeline -u jdbc:hive2://
Vous pouvez créer une table Iceberg partitionnée ou non partitionnée dans Hive.
Table non partitionnée
Créez une table Iceberg non partitionnée dans Hive.
CREATE TABLE my_table ( id INT, name STRING, created_at TIMESTAMP ) STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler';
Table partitionnée
Créez une table Iceberg partitionnée dans Hive en spécifiant les colonnes de partition dans la clause PARTITIONED BY.
CREATE TABLE my_partitioned_table ( id INT, name STRING ) PARTITIONED BY (date_sk INT) STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler';
Insérer des données dans une table Iceberg dans Hive
Vous pouvez insérer des données dans une table Iceberg à l'aide d'instructions Hive INSERT standards.
SET hive.execution.engine=mr; INSERT INTO my_table SELECT 1, 'Alice', current_timestamp();
Limites
- Seul le moteur d'exécution MR (MapReduce) est compatible avec les opérations LMD (langage de manipulation de données).
- L'exécution de MR est obsolète dans Hive
3.1.3.
Lire des données à partir d'une table Iceberg dans Hive
Pour lire les données d'une table Iceberg, utilisez une instruction SELECT.
SELECT * FROM my_table;
Supprimer une table Iceberg dans Hive.
Pour supprimer une table Iceberg dans Hive, utilisez l'instruction DROP TABLE.
DROP TABLE my_table;
Étapes suivantes
- Consultez le guide de démarrage rapide d'Iceberg.