Mit der optionalen Iceberg-Komponente können Sie Data Lakehouse-Tabellen mit ACID-Transaktionen und Schemaentwicklung in Managed Service for Apache Spark-Clustern verwalten. Sie können Iceberg während der Clustererstellung mit der Funktion Optionale Komponenten installieren, um Tabellen in Spark- und Hive-Arbeitslasten abzufragen und zu aktualisieren.
Wichtige Iceberg-Funktionen
Iceberg-Funktionen:
- Schemaentwicklung: Sie können Spalten hinzufügen, entfernen oder umbenennen, ohne die gesamte Tabelle neu schreiben zu müssen.
- Zeitreise: Fragen Sie historische Tabellen-Snapshots für Audits oder Rollbacks ab.
- Versteckte Partitionierung: Optimieren Sie das Datenlayout für schnellere Abfragen, ohne Nutzern Partitionsdetails offenzulegen.
- ACID-Transaktionen: Sorgen für Datenkonsistenz und verhindern Konflikte.
Iceberg-bezogene Attribute
Wenn Sie einen Managed Service for Apache Spark mit Iceberg-Cluster erstellen, werden die folgenden Spark- und Hive-Attribute für die Verwendung mit Iceberg konfiguriert.
Image-Version 2.x
Die folgenden Spark- und Hive-Properties werden auf Managed Service for Apache Spark-Clustern der Version 2.x konfiguriert, wenn die Iceberg-Komponente installiert ist:
| Konfigurationsdatei | Attribut | Standardwert |
|---|---|---|
/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 |
Image-Version 3.0
Die folgenden Spark- und Hive-Attribute werden auf Managed Service for Apache Spark-Clustern der Version 3.0 konfiguriert, wenn die Iceberg-Komponente installiert ist:
| Konfigurationsdatei | Attribut | Standardwert |
|---|---|---|
/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 |
Optionale Iceberg-Komponente installieren
Sie können die Iceberg-Komponente auf Managed Service for Apache Spark-Clustern installieren, die mit Image-Versionen ab 2.2.47 erstellt wurden. Auf den Seiten der Liste der Image-Versionen für Managed Service for Apache Spark-Cluster finden Sie die Iceberg-Komponentenversion, die in den neuesten Image-Versionen für Managed Service for Apache Spark-Cluster enthalten ist.
Google Cloud Console
Führen Sie die folgenden Schritte in der Google Cloud Console aus, um einen Managed Service for Apache Spark-Cluster zu erstellen, der die Iceberg-Komponente installiert:
- Öffnen Sie die Seite Cluster erstellen.
- Klicken Sie auf Zusätzliche Konfiguration, um den Bereich zu maximieren.
- Bearbeiten Sie Optionale Komponenten.
- Wählen Sie im daraufhin geöffneten Bereich das Kästchen für Iceberg aus.
- Klicken Sie auf Speichern.
gcloud-CLI
Wenn Sie einen Managed Service for Apache Spark-Cluster erstellen möchten, der die Iceberg-Komponente installiert, verwenden Sie den Befehl gcloud dataproc clusters create mit dem Flag --optional-components.
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --optional-components=ICEBERG \ other flags ...
Ersetzen Sie Folgendes:
- CLUSTER_NAME: Der neue Clustername.
- REGION: Die Clusterregion.
REST API
Wenn Sie einen Managed Service for Apache Spark-Cluster erstellen möchten, der die optionale Iceberg-Komponente installiert, geben Sie die Iceberg-SoftwareConfig.Component als Teil einer clusters.create-Anfrage an.
Iceberg-Tabellen mit Spark und Hive verwenden
Nachdem Sie einen Managed Service for Apache Spark-Cluster erstellt haben, auf dem die optionale Iceberg-Komponente installiert ist, können Sie mit Spark und Hive Iceberg-Tabellendaten lesen und schreiben.
Spark
Spark-Sitzung für Iceberg konfigurieren
Sie können den gcloud CLI-Befehl lokal oder die REPLs (Read-Eval-Print Loops) spark-shell oder pyspark verwenden, die auf dem Dataproc-Clustermasterknoten ausgeführt werden, um die Spark-Erweiterungen von Iceberg zu aktivieren und den Spark-Katalog für die Verwendung von Iceberg-Tabellen einzurichten.
gcloud
Führen Sie das folgende gcloud CLI-Beispiel in einem lokalen Terminalfenster oder in Cloud Shell aus, um einen Spark-Job zu senden und Spark-Attribute festzulegen, um die Spark-Sitzung für Iceberg zu konfigurieren.
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 ...
Ersetzen Sie Folgendes:
- CLUSTER_NAME: Der Clustername.
- REGION: Die Compute Engine-Region.
- CATALOG_NAME: Iceberg-Katalogname.
- BUCKET und FOLDER: Der Speicherort des Iceberg-Katalogs in Cloud Storage.
spark-shell
So konfigurieren Sie eine Spark-Sitzung für Iceberg mit der spark-shell-REPL im Managed Service for Apache Spark-Cluster:
Stellen Sie über SSH eine Verbindung zum Masterknoten des Managed Service for Apache Spark-Clusters her.
Führen Sie im Terminal der SSH-Sitzung den folgenden Befehl aus, um die Spark-Sitzung für Iceberg zu konfigurieren.
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"
Ersetzen Sie Folgendes:
- CLUSTER_NAME: Der Clustername.
- REGION: Die Compute Engine-Region.
- CATALOG_NAME: Iceberg-Katalogname.
- BUCKET und FOLDER: Der Speicherort des Iceberg-Katalogs in Cloud Storage.
pyspark shell
So konfigurieren Sie eine Spark-Sitzung für Iceberg mit der pyspark-REPL im Managed Service for Apache Spark-Cluster:
Stellen Sie über SSH eine Verbindung zum Masterknoten des Managed Service for Apache Spark-Clusters her.
Führen Sie im SSH-Sitzungsterminal den folgenden Befehl aus, um die Spark-Sitzung für Iceberg zu konfigurieren:
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"
Ersetzen Sie Folgendes:
- CLUSTER_NAME: Der Clustername.
- REGION: Die Compute Engine-Region.
- CATALOG_NAME: Iceberg-Katalogname.
- BUCKET und FOLDER: Der Speicherort des Iceberg-Katalogs in Cloud Storage.
Daten in eine Iceberg-Tabelle schreiben
Sie können mit Spark Daten in eine Iceberg-Tabelle schreiben. Mit den folgenden Code-Snippets wird ein DataFrame mit Beispieldaten erstellt, eine Iceberg-Tabelle in Cloud Storage erstellt und die Daten dann in die Iceberg-Tabelle geschrieben.
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()
Daten aus einer Iceberg-Tabelle lesen
Sie können Daten aus einer Iceberg-Tabelle mit Spark lesen. In den folgenden Code-Snippets wird die Tabelle gelesen und dann ihr Inhalt angezeigt.
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
Iceberg-Tabelle in Hive erstellen
Managed Service for Apache Spark-Cluster konfigurieren Hive vor, damit es mit Iceberg funktioniert.
Führen Sie die folgenden Schritte aus, um die Code-Snippets in diesem Abschnitt auszuführen:
Stellen Sie über SSH eine Verbindung zum Masterknoten Ihres Managed Service for Apache Spark-Clusters her.
Rufen Sie
beelineim SSH-Terminalfenster auf.beeline -u jdbc:hive2://
Sie können in Hive eine nicht partitionierte oder partitionierte Iceberg-Tabelle erstellen.
Nicht partitionierte Tabelle
Erstellen Sie eine nicht partitionierte Iceberg-Tabelle in Hive.
CREATE TABLE my_table ( id INT, name STRING, created_at TIMESTAMP ) STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler';
Partitionierte Tabelle
Erstellen Sie eine partitionierte Iceberg-Tabelle in Hive, indem Sie die Partitionsspalten in der PARTITIONED BY-Klausel angeben.
CREATE TABLE my_partitioned_table ( id INT, name STRING ) PARTITIONED BY (date_sk INT) STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler';
Daten in eine Iceberg-Tabelle in Hive einfügen
Sie können Daten mit standardmäßigen Hive-INSERT-Anweisungen in eine Iceberg-Tabelle einfügen.
SET hive.execution.engine=mr; INSERT INTO my_table SELECT 1, 'Alice', current_timestamp();
Einschränkungen
- Die MR-Ausführungs-Engine (MapReduce) wird nur für DML-Vorgänge (Datenbearbeitungssprache) unterstützt.
- Die MR-Ausführung wird in Hive
3.1.3nicht mehr unterstützt.
Daten aus einer Iceberg-Tabelle in Hive lesen
Verwenden Sie eine SELECT-Anweisung, um Daten aus einer Iceberg-Tabelle zu lesen.
SELECT * FROM my_table;
Iceberg-Tabelle in Hive löschen.
Verwenden Sie die DROP TABLE-Anweisung, um eine Iceberg-Tabelle in Hive zu löschen.
DROP TABLE my_table;