Optionale Iceberg-Komponente für Managed Service for Apache Spark

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.

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:

  1. Öffnen Sie die Seite Cluster erstellen.
  2. Klicken Sie auf Zusätzliche Konfiguration, um den Bereich zu maximieren.
  3. Bearbeiten Sie Optionale Komponenten.
  4. Wählen Sie im daraufhin geöffneten Bereich das Kästchen für Iceberg aus.
  5. 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:

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:

  1. Stellen Sie über SSH eine Verbindung zum Masterknoten des Managed Service for Apache Spark-Clusters her.

  2. 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:

  1. Stellen Sie über SSH eine Verbindung zum Masterknoten des Managed Service for Apache Spark-Clusters her.

  2. 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:

  1. Stellen Sie über SSH eine Verbindung zum Masterknoten Ihres Managed Service for Apache Spark-Clusters her.

  2. Rufen Sie beeline im 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.3 nicht 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;

Nächste Schritte