Composant Iceberg facultatif de Dataproc

Vous pouvez installer des composants supplémentaires comme Iceberg lorsque vous créez un cluster Dataproc à l'aide de la fonctionnalité Composants facultatifs. Cette page explique comment installer le composant Iceberg sur un cluster Dataproc.

Présentation

Apache Iceberg est un format de table ouvert pour les ensembles de données analytiques volumineux. Il apporte la fiabilité et la simplicité des tables SQL au Big Data, tout en permettant aux moteurs tels que Spark, Trino, PrestoDB, Flink et Hive de fonctionner en toute sécurité avec les mêmes tables en même temps.

Lorsqu'il est installé sur un cluster Dataproc, le composant Apache Iceberg installe les bibliothèques Iceberg et configure Spark et Hive pour qu'ils fonctionnent avec Iceberg sur le cluster.

Fonctionnalités clés d'Iceberg

Les fonctionnalités d'Iceberg incluent les suivantes :

  • Évolution du schéma : ajoutez, supprimez ou renommez des colonnes sans réécrire l'intégralité de la table.
  • Fonctionnalité temporelle : interrogez les instantanés historiques des tables à des fins d'audit ou de restauration.
  • Partitionnement masqué : optimisez la mise en page des données pour accélérer les requêtes sans exposer les détails de la partition aux utilisateurs.
  • Transactions ACID : assurez la cohérence des données et évitez les conflits.

Versions d'image Dataproc compatibles

Vous pouvez installer le composant Iceberg sur les clusters Dataproc créés avec 2.2.47 et les versions d'image ultérieures. La version d'Iceberg installée sur le cluster est répertoriée sur la page des versions 2.2.

Lorsque vous créez un cluster Dataproc avec Iceberg, les propriétés Spark et Hive suivantes sont configurées pour fonctionner avec Iceberg.

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

Installer le composant facultatif Iceberg

Installez le composant Iceberg lorsque vous créez un cluster Dataproc. Les pages de la liste des versions d'image de cluster Dataproc affichent la version du composant Iceberg incluse dans les dernières versions d'image de cluster Dataproc.

Google Cloud Console

Pour créer un cluster Dataproc qui installe le composant Iceberg, procédez comme suit dans la Google Cloud console :

  1. Ouvrez la page Créer un cluster Dataproc. Le panneau Configurer un cluster est sélectionné.
  2. Dans la section Composants, sous Composants facultatifs, sélectionnez le composant Iceberg.
  3. Confirmez ou spécifiez d'autres paramètres de cluster, puis cliquez sur Créer.

Google Cloud CLI

Pour créer un cluster Dataproc qui installe le composant Iceberg, utilisez la gcloud dataproc clusters create commande 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 : nom du nouveau cluster.
  • REGION : région du cluster.

API REST

Pour créer un cluster Dataproc qui installe le composant facultatif Iceberg, spécifiez le Iceberg SoftwareConfig.Component dans le cadre d'une clusters.create requête.

Utiliser des tables Iceberg avec Spark et Hive

Après avoir créé un cluster Dataproc 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 en local, ou les spark-shell ou pyspark REPL (boucles Read-Eval-Print) s'exécutant sur le nœud maître du cluster Dataproc pour activer les extensions Spark d'Iceberg et configurer le catalogue Spark afin qu'il utilise les tables Iceberg.

gcloud

Exécutez l'exemple gcloud CLI suivant dans une fenêtre de terminal locale ou dans Cloud Shell pour envoyer une tâche 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 du spark-shell REPL sur le cluster Dataproc, procédez comme suit :

  1. Utilisez SSH pour vous connecter au nœud maître du cluster Dataproc.

  2. 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.

Interface système pyspark

Pour configurer une session Spark pour Iceberg à l'aide du pyspark REPL sur le cluster Dataproc, procédez comme suit :

  1. Utilisez SSH pour vous connecter au nœud maître du cluster Dataproc.

  2. 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 exemples de donné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 des données à partir 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 Dataproc préconfigurent Hive pour qu'il fonctionne avec Iceberg.

Pour exécuter les extraits de code de cette section, procédez comme suit :

  1. Utilisez SSH pour vous connecter au nœud maître de votre cluster Dataproc.

  2. Affichez beeline dans la fenêtre du 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 PARTITIONED BY clause.

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 standards INSERT.

SET hive.execution.engine=mr;

INSERT INTO my_table
SELECT 1, 'Alice', current_timestamp();

Limites

  • Le moteur d'exécution MR (MapReduce) n'est compatible qu'avec les opérations DML (langage de manipulation de données).
  • L'exécution MR est obsolète dans Hive 3.1.3.

Lire des données à partir d'une table Iceberg dans Hive

Pour lire des données à partir 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;

Étape suivante