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.
Proprietà correlate a Iceberg
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:
- Apri la pagina Crea un cluster Dataproc. Il riquadro Configura cluster è selezionato.
- Nella sezione Componenti, in Componenti facoltativi, seleziona il componente Iceberg.
- 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:
- CLUSTER_NAME: il nome del nuovo cluster.
- REGION: la regione del cluster.
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:
Utilizza SSH per connetterti al nodo master del cluster Dataproc.
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:
Utilizza SSH per connetterti al nodo master del cluster Dataproc.
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:
Utilizza SSH per connetterti al nodo master del cluster Dataproc.
Apri
beelinenella 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
- Consulta la guida rapida di Iceberg.