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