Il componente facoltativo Iceberg ti consente di gestire le tabelle del data lakehouse con transazioni ACID ed evoluzione dello schema sui cluster Managed Service for Apache Spark. Puoi installare Iceberg durante la creazione del cluster utilizzando la funzionalità Componenti facoltativi per eseguire query e aggiornare le tabelle nei workload Spark e Hive.
Funzionalità principali di Iceberg
Le funzionalità di Iceberg includono:
- Evoluzione dello schema: aggiungi, rimuovi o rinomina le colonne senza riscrivere l'intera tabella.
- Viaggio nel tempo: esegui query sugli snapshot delle tabelle storiche per scopi di controllo o rollback.
- Partizionamento nascosto: ottimizza il layout dei dati per query più rapide senza esporre i dettagli della partizione agli utenti.
- Transazioni ACID: garantiscono la coerenza dei dati e prevengono i conflitti.
Proprietà correlate a Iceberg
Quando crei un cluster Managed Service for Apache Spark con Iceberg, le seguenti proprietà Spark e Hive vengono configurate per funzionare con Iceberg.
Versione immagine 2.x
Le seguenti proprietà Spark e Hive sono configurate sui cluster Managed Service for Apache Spark "2.x" quando è installato il componente 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 |
Versione immagine 3.0
Le seguenti proprietà Spark e Hive sono configurate sui cluster Managed Service for Apache Spark "3.0" quando è installato il componente Iceberg:
| File di configurazione | Proprietà | Valore predefinito |
|---|---|---|
/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 |
Installa il componente facoltativo Iceberg
Puoi installare il componente Iceberg sui cluster Managed Service for Apache Spark creati con le versioni immagine 2.2.47 e successive. Le pagine dell'elenco delle versioni delle immagini dei cluster Managed Service for Apache Spark mostrano la versione del componente Iceberg inclusa nelle ultime versioni delle immagini dei cluster Managed Service for Apache Spark.
ConsoleGoogle Cloud
Per creare un cluster Managed Service for Apache Spark che installi il componente Iceberg, completa i seguenti passaggi nella console Google Cloud :
- Apri la pagina Crea cluster.
- Fai clic su Configurazione aggiuntiva per espandere la sezione.
- Modifica i componenti facoltativi.
- Nel riquadro che si apre, seleziona la casella di controllo Iceberg.
- Fai clic su Salva.
gcloud CLI
Per creare un cluster Managed Service for Apache Spark che installi 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:
- CLUSTER_NAME: il nuovo nome del cluster.
- REGION: la regione del cluster.
API REST
Per creare un cluster Managed Service for Apache Spark che installa il componente facoltativo Iceberg,
specifica Iceberg
SoftwareConfig.Component
come parte di una richiesta
clusters.create.
Utilizza le tabelle Iceberg con Spark e Hive
Dopo aver creato un cluster Managed Service for Apache Spark con il componente facoltativo Iceberg installato sul cluster, puoi utilizzare Spark e Hive per leggere e scrivere i dati della tabella Iceberg.
Spark
Configura una sessione Spark per Iceberg
Puoi utilizzare il comando gcloud CLI localmente o i REPL (Read-Eval-Print Loop) spark-shell o pyspark in esecuzione sul nodo master del cluster Dataproc per abilitare le estensioni Spark di Iceberg e configurare il catalogo Spark per l'utilizzo delle 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à di 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 di Compute Engine.
- CATALOG_NAME: il nome del catalogo Iceberg.
- BUCKET e FOLDER: la località del catalogo Iceberg in Cloud Storage.
spark-shell
Per configurare una sessione Spark per Iceberg utilizzando il REPL spark-shell sul cluster Managed Service for Apache Spark, completa i seguenti passaggi:
Utilizza SSH per connetterti al nodo master del cluster Managed Service for Apache Spark.
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 di Compute Engine.
- CATALOG_NAME: il nome del catalogo Iceberg.
- BUCKET e FOLDER: la località del catalogo Iceberg in Cloud Storage.
shell pyspark
Per configurare una sessione Spark per Iceberg utilizzando il REPL pyspark sul cluster Managed Service for Apache Spark, completa i seguenti passaggi:
Utilizza SSH per connetterti al nodo master del cluster Managed Service for Apache Spark.
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 di Compute Engine.
- CATALOG_NAME: il nome del catalogo Iceberg.
- BUCKET e FOLDER: la località del catalogo Iceberg in Cloud Storage.
Scrivi dati in una tabella Iceberg
Puoi scrivere dati in una tabella Iceberg utilizzando Spark. I seguenti snippet di codice creano un
DataFrame
con dati campionati, 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 Managed Service for Apache Spark preconfigurano Hive per l'utilizzo con Iceberg.
Per eseguire gli snippet di codice in questa sezione, completa i seguenti passaggi:
Utilizza SSH per connetterti al nodo master del tuo cluster Managed Service for Apache Spark.
Visualizza
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 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';
Inserisci i dati in una tabella Iceberg in Hive
Puoi inserire dati in una tabella Iceberg utilizzando le istruzioni Hive INSERT standard.
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.
Leggi 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
- Consulta la guida rapida di Iceberg.