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 a motori come Spark, Trino, PrestoDB, Flink e Hive di lavorare in sicurezza con le stesse tabelle contemporaneamente.

Se 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à principali di Iceberg

Le funzionalità di Iceberg includono:

  • Evoluzione dello schema:aggiungi, rimuovi o rinomina colonne senza riscrivere l'intera tabella.
  • Spostamento nel tempo:esegui query sugli snapshot storici delle tabelle a scopo di controllo o rollback.
  • Partizionamento nascosto:ottimizza il layout dei dati per query più veloci senza esporre i dettagli delle partizioni agli utenti.
  • Transazioni ACID: garantiscono la coerenza dei dati e prevengono i conflitti.

Versioni immagine Dataproc compatibili

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

Quando crei un cluster Dataproc con Iceberg, le seguenti proprietà di Spark e Hive sono 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

Installa il componente facoltativo Iceberg

Installa il componente Iceberg quando crei un cluster Dataproc. Le pagine dell'elenco 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 console Google Cloud :

  1. Apri la pagina Crea un cluster di 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, poi fai clic su Crea.

Google Cloud CLI

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

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 SoftwareConfig.Component come parte di una richiesta clusters.create.

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

Configura una sessione Spark per Iceberg

Puoi utilizzare il comando gcloud CLI in locale o le REPL (Read-Eval-Print Loops) spark-shell o pyspark in esecuzione sul nodo master del cluster Dataproc per attivare 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 spark-shell REPL sul cluster Dataproc, completa i seguenti passaggi:

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

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

pyspark shell

Per configurare una sessione Spark per Iceberg utilizzando pyspark REPL sul cluster Dataproc, completa i seguenti passaggi:

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

  2. Esegui questo 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 i 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 poi 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()

Leggi 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

Crea una tabella Iceberg in Hive

I cluster Dataproc preconfigurano Hive per funzionare con Iceberg.

Per eseguire gli snippet di codice in questa sezione, completa i seguenti passaggi:

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

  2. Visualizza 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 partizione nella clausola PARTITIONED BY.

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 di MR è deprecata 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;

Elimina una tabella Iceberg in Hive.

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

DROP TABLE my_table;

Passaggi successivi