Componente Iceberg facoltativo di Dataproc

Puoi installare componenti aggiuntivi come Iceberg quando crei un cluster Dataproc utilizzando la funzionalità Componenti facoltativi. Questa pagina descrive come installare facoltativamente il componente Iceberg su un cluster Dataproc.

Panoramica

Apache Iceberg è un formato di tabella aperto per set di dati analitici di grandi dimensioni. Offre l'affidabilità e la semplicità delle tabelle SQL ai Big Data, consentendo al contempo a motori come Spark, Trino, PrestoDB, Flink e Hive di lavorare in sicurezza con le stesse tabelle contemporaneamente.

Quando viene installato su un cluster Dataproc, il componente Apache Iceberg installa le librerie Iceberg e configura Spark e Hive per funzionare con Iceberg sul cluster.

Funzionalità chiave di Iceberg

Le funzionalità di Iceberg includono le seguenti:

  • Evoluzione dello schema: aggiungi, rimuovi o rinomina le colonne senza riscrivere l'intera tabella.
  • Time travel: esegui query sugli snapshot storici delle tabelle a scopo di audit o rollback.
  • Partizionamento nascosto: ottimizza il layout dei dati per query più veloci senza esporre i dettagli delle partizioni agli utenti.
  • Transazioni ACID: garantisci la coerenza dei dati ed evita conflitti.

Versioni immagine Dataproc compatibili

Puoi installare il componente Iceberg sui cluster Dataproc creati con 2.2.47 e versioni immagine successive. La versione di Iceberg installata sul cluster è elencata nella pagina delle versioni di rilascio 2.2.

Quando crei un cluster Dataproc con Iceberg, le seguenti proprietà di Spark e Hive vengono configurate per funzionare con Iceberg.

File di configurazione Proprietà Valore predefinito
/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

Installare il componente facoltativo Iceberg

Installa il componente Iceberg quando crei un cluster Dataproc. Le pagine degli elenchi delle versioni immagine del cluster Dataproc mostrano la versione del componente Iceberg inclusa nelle versioni immagine del cluster Dataproc più recenti.

Google Cloud Console

Per creare un cluster Dataproc che installa il componente Iceberg, completa i seguenti passaggi nella Google Cloud console:

  1. Apri la pagina Crea un cluster Dataproc. Il riquadro Configura cluster è selezionato.
  2. Nella sezione Componenti, in Componenti facoltativi, seleziona il componente Iceberg.
  3. Conferma o specifica altre impostazioni del cluster, quindi fai clic su Crea.

Google Cloud CLI

Per creare un cluster Dataproc che installa il componente Iceberg, utilizza il gcloud dataproc clusters create comando con il --optional-components flag.

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --optional-components=ICEBERG \
     other flags ...

Sostituisci quanto segue:

API REST

Per creare un cluster Dataproc che installa il componente facoltativo Iceberg, specifica Iceberg SoftwareConfig.Component come parte di una clusters.create richiesta.

Utilizzare le tabelle Iceberg con Spark e Hive

Dopo aver creato un cluster Dataproc con il componente facoltativo Iceberg installato sul cluster, puoi utilizzare Spark e Hive per leggere e scrivere i dati delle tabelle Iceberg.

Spark

Configurare una sessione Spark per Iceberg

Puoi utilizzare il comando gcloud CLI localmente o i spark-shell o pyspark REPL (Read-Eval-Print Loops) in esecuzione sul nodo master del cluster Dataproc per abilitare le estensioni Spark di Iceberg e configurare il catalogo Spark in modo che utilizzi le tabelle Iceberg.

gcloud

Esegui il seguente esempio di gcloud CLI in una finestra del terminale locale o in Cloud Shell per inviare un job Spark e impostare le proprietà Spark per configurare la sessione Spark per 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 ...

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster.
  • REGION: la regione Compute Engine.
  • CATALOG_NAME: il nome del catalogo Iceberg.
  • BUCKET e FOLDER: la posizione del catalogo Iceberg in Cloud Storage.

spark-shell

Per configurare una sessione Spark per Iceberg utilizzando il spark-shell REPL sul cluster Dataproc:

  1. Utilizza SSH per connetterti al nodo master del cluster Dataproc.

  2. Esegui il seguente comando nel terminale della sessione SSH per configurare la sessione Spark per 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"

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster.
  • REGION: la regione Compute Engine.
  • CATALOG_NAME: il nome del catalogo Iceberg.
  • BUCKET e FOLDER: la posizione del catalogo Iceberg in Cloud Storage.

shell pyspark

Per configurare una sessione Spark per Iceberg utilizzando il REPL pyspark sul cluster Dataproc:

  1. Utilizza SSH per connetterti al nodo master del cluster Dataproc.

  2. Esegui il seguente comando nel terminale della sessione SSH per configurare la sessione Spark per 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"

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster.
  • REGION: la regione Compute Engine.
  • CATALOG_NAME: il nome del catalogo Iceberg.
  • BUCKET e FOLDER: la posizione del catalogo Iceberg in Cloud Storage.

Scrivere dati in una tabella Iceberg

Puoi scrivere dati in una tabella Iceberg utilizzando Spark. I seguenti snippet di codice creano un DataFrame con dati di esempio, creano una tabella Iceberg in Cloud Storage, e quindi scrivono i dati nella tabella 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()

Leggere i dati da una tabella Iceberg

Puoi leggere i dati da una tabella Iceberg utilizzando Spark. I seguenti snippet di codice leggono la tabella e ne visualizzano i contenuti.

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

Creare una tabella Iceberg in Hive

I cluster Dataproc preconfigurano Hive per funzionare con Iceberg.

Per eseguire gli snippet di codice in questa sezione:

  1. Utilizza SSH per connetterti al nodo master del cluster Dataproc.

  2. Apri beeline nella finestra del terminale SSH.

    beeline -u jdbc:hive2://
    

Puoi creare una tabella Iceberg non partizionata o partizionata in Hive.

Tabella non partizionata

Crea una tabella Iceberg non partizionata in Hive.

CREATE TABLE my_table (
  id INT,
  name STRING,
  created_at TIMESTAMP
) STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler';

Tabella partizionata

Crea una tabella Iceberg partizionata in Hive specificando le colonne di partizionamento nella PARTITIONED BY clausola.

CREATE TABLE my_partitioned_table (
  id INT,
  name STRING
) PARTITIONED BY (date_sk INT)
STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler';

Inserire dati in una tabella Iceberg in Hive

Puoi inserire dati in una tabella Iceberg utilizzando le istruzioni INSERT standard di Hive.

SET hive.execution.engine=mr;

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

Limitazioni

  • Il motore di esecuzione MR (MapReduce) è supportato solo per le operazioni DML (Data Manipulation Language).
  • L'esecuzione MR è obsoleta in Hive 3.1.3.

Leggere i dati da una tabella Iceberg in Hive

Per leggere i dati da una tabella Iceberg, utilizza un'istruzione SELECT.

SELECT * FROM my_table;

Eliminare una tabella Iceberg in Hive

Per eliminare una tabella Iceberg in Hive, utilizza l'istruzione DROP TABLE.

DROP TABLE my_table;

Passaggi successivi