BigQuery-Metastore mit Dataproc verwenden

In diesem Dokument wird beschrieben, wie Sie den BigQuery-Metastore mit Dataproc in der Compute Engine verwenden. Diese Verbindung bietet Ihnen einen einzigen freigegebenen Metastore, der für Open-Source-Software-Engines wie Apache Spark funktioniert.

Hinweise

  1. Aktivieren Sie die Abrechnung für Ihr Google Cloud-Projekt. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist.
  2. Aktivieren Sie die BigQuery- und Dataproc-APIs.

    APIs aktivieren

  3. Optional: Informationen zur Funktionsweise des BigQuery-Metaspeichers und zu den Vorteilen seiner Verwendung

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um Spark und Dataproc mit dem BigQuery-Metadatenspeicher als Metadatenspeicher zu verwenden:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Allgemeiner Workflow

So verwenden Sie Dataproc in der Compute Engine mit dem BigQuery-Metastore:

  1. Erstellen Sie einen Dataproc-Cluster oder konfigurieren Sie einen vorhandenen Cluster.
  2. Stellen Sie eine Verbindung zu Ihrer bevorzugten Open-Source-Software-Engine wie Spark her.
  3. Verwenden Sie eine JAR-Datei, um das Apache Iceberg-Katalog-Plug-in im Cluster zu installieren.
  4. Erstellen und verwalten Sie Ihre BigQuery-Metastore-Ressourcen nach Bedarf, je nachdem, welche Open-Source-Software-Engine Sie verwenden.
  5. In BigQuery auf Ihre BigQuery Metastore-Ressourcen zugreifen und diese verwenden

BigQuery-Metastore mit Spark verbinden

In der folgenden Anleitung wird beschrieben, wie Sie mithilfe von interaktivem Spark SQL eine Verbindung zwischen Dataproc und dem BigQuery-Metastore herstellen.

Iceberg-Katalog-Plug-in herunterladen

Wenn Sie den BigQuery-Metastore mit Dataproc und Spark verbinden möchten, müssen Sie die JAR-Datei des BigQuery-Metastore-Iceberg-Katalog-Plug-ins verwenden.

Diese Datei ist standardmäßig in der Dataproc-Image-Version 2.2 enthalten. Wenn Ihre Dataproc-Cluster keinen direkten Zugriff auf das Internet haben, müssen Sie das Plug-in herunterladen und in einen Cloud Storage-Bucket hochladen, auf den Ihr Dataproc-Cluster zugreifen kann.

Laden Sie das Apache Iceberg-Katalog-Plug-in für den BigQuery-Metastore herunter.

Dataproc-Cluster konfigurieren

Bevor Sie eine Verbindung zum BigQuery-Metastore herstellen können, müssen Sie einen Dataproc-Cluster einrichten.

Dazu können Sie einen neuen Cluster erstellen oder einen vorhandenen verwenden. Anschließend können Sie diesen Cluster verwenden, um interaktive Spark SQL-Abfragen auszuführen und Ihre BigQuery-Metastore-Ressourcen zu verwalten.

  • Für das Subnetz in der Region, in der der Cluster erstellt wird, muss der private Google-Zugriff aktiviert sein. Standardmäßig haben Dataproc-Cluster-VMs, die mit der Imageversion 2.2 (Standard) oder höher erstellt wurden, nur interne IP-Adressen. Damit Cluster-VMs mit Google APIs kommunizieren können, aktivieren Sie den privaten Google-Zugriff im Netzwerksubnetz default (oder dem vom Nutzer angegebenen Netzwerknamen, falls zutreffend) in der Region, in der der Cluster erstellt wird.

  • Wenn Sie das Beispiel für die Zeppelin-Weboberfläche in dieser Anleitung ausführen möchten, müssen Sie einen Dataproc-Cluster mit aktivierter optionaler Zeppelin-Komponente verwenden oder erstellen.

Neuer Cluster

Führen Sie den folgenden gcloud dataproc clusters create-Befehl aus, um einen neuen Dataproc-Cluster zu erstellen. Diese Konfiguration enthält die Einstellungen, die Sie für die Verwendung des BigQuery-Metaspeichers benötigen.

gcloud dataproc clusters create CLUSTER_NAME \
  --project=PROJECT_ID \
  --region=LOCATION \
  --optional-components=ZEPPELIN \
  --enable-component-gateway \
  --single-node

Ersetzen Sie Folgendes:

  • CLUSTER_NAME: ein Name für Ihren Dataproc-Cluster.
  • PROJECT_ID: Die ID des Google Cloud-Projekts, in dem Sie den Cluster erstellen.
  • LOCATION: die Google Cloud Region, in der Sie den Cluster erstellen.

Vorhandener Cluster

Wenn Sie einen vorhandenen Cluster konfigurieren möchten, fügen Sie ihm die folgende Iceberg-Spark-Laufzeit hinzu.

org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.5.2

Sie haben folgende Möglichkeiten, die Laufzeit hinzuzufügen:

Spark-Job senden

Sie haben folgende Möglichkeiten, einen Spark-Job einzureichen:

gcloud-CLI

gcloud dataproc jobs submit spark-sql \
--project=PROJECT_ID \
--cluster=CLUSTER_NAME \
--region==REGION \
--jars=https://storage-download.googleapis.com/maven-central/maven2/org/apache/iceberg/iceberg-spark-runtime-3.5_2.12/1.5.2/iceberg-spark-runtime-3.5_2.12-1.5.2.jar,gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.5.2-1.0.0-beta.jar \
--properties=spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog, \
spark.sql.catalog.CATALOG_NAME.catalog-impl=org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog, \
spark.sql.catalog.CATALOG_NAME.gcp_project=PROJECT_ID, \
spark.sql.catalog.CATALOG_NAME.gcp_location=LOCATION, \
spark.sql.catalog.CATALOG_NAME.warehouse=WAREHOUSE_DIRECTORY \
--execute="SPARK_SQL_COMMAND"

Ersetzen Sie Folgendes:

  • PROJECT_ID: die ID des Google Cloud-Projekts, das den Dataproc-Cluster enthält.
  • CLUSTER_NAME: der Name des Dataproc-Clusters, mit dem Sie den Spark SQL-Job ausführen.
  • REGION: die Compute Engine-Region, in der sich Ihr Cluster befindet.
  • LOCATION: den Speicherort der BigQuery-Ressourcen.
  • CATALOG_NAME: der Name des Spark-Katalogs, den Sie für Ihren SQL-Job verwenden.
  • WAREHOUSE_DIRECTORY: den Cloud Storage-Ordner, der Ihr Data Warehouse enthält. Dieser Wert beginnt mit gs://.
  • SPARK_SQL_COMMAND: die Spark SQL-Abfrage, die Sie ausführen möchten. Diese Abfrage enthält die Befehle zum Erstellen Ihrer Ressourcen. Beispiel: Sie möchten einen Namespace und eine Tabelle erstellen.

Interaktive Funken

Verbindung zu Spark herstellen und das Katalog-Plug-in installieren

Um das Katalog-Plug-in für den BigQuery-Metastore zu installieren, stellen Sie über SSH eine Verbindung zu Ihrem Dataproc-Cluster her.

  1. Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
  2. Wenn Sie eine Verbindung zu einer Dataproc-VM-Instanz herstellen möchten, klicken Sie in der Liste der VM-Instanzen auf SSH. Die Ausgabe sieht etwa so aus:

    Connected, host fingerprint: ssh-rsa ...
    Linux cluster-1-m 3.16.0-0.bpo.4-amd64 ...
    ...
    example-cluster@cluster-1-m:~$
    
  3. Führen Sie im Terminal den folgenden Befehl zum Initialisieren des BigQuery-Metaspeichers aus:

    spark-sql \
    --jars https://storage-download.googleapis.com/maven-central/maven2/org/apache/iceberg/iceberg-spark-runtime-3.5_2.12/1.5.2/iceberg-spark-runtime-3.5_2.12-1.5.2.jar,gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.5.2-1.0.0-beta.jar \
    --conf spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog \
    --conf spark.sql.catalog.CATALOG_NAME.catalog-impl=org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog \
    --conf spark.sql.catalog.CATALOG_NAME.gcp_project=PROJECT_ID \
    --conf spark.sql.catalog.CATALOG_NAME.gcp_location=LOCATION \
    --conf spark.sql.catalog.CATALOG_NAME.warehouse=WAREHOUSE_DIRECTORY

    Ersetzen Sie Folgendes:

    • CATALOG_NAME: der Name des Spark-Katalogs, den Sie für Ihren SQL-Job verwenden.
    • PROJECT_ID: Die Google Cloud-Projekt-ID des BigQuery-Metastore-Katalogs, mit dem Ihr Spark-Katalog verknüpft ist.
    • LOCATION: Der Google Cloud Speicherort des BigQuery-Metaspeichers.
    • WAREHOUSE_DIRECTORY: den Cloud Storage-Ordner, der Ihr Data Warehouse enthält. Dieser Wert beginnt mit gs://.

    Nachdem Sie eine Verbindung zu einem Cluster hergestellt haben, wird im Spark-Terminal der Prompt spark-sql angezeigt.

    spark-sql (default)>
    

BigQuery-Metastore-Ressourcen verwalten

Sie sind jetzt mit dem BigQuery-Metastore verbunden. Sie können sich Ihre vorhandenen Ressourcen ansehen oder neue Ressourcen basierend auf den im BigQuery-Metastore gespeicherten Metadaten erstellen.

Führen Sie beispielsweise die folgenden Befehle in der interaktiven Spark SQL-Sitzung aus, um einen Iceberg-Namespace und eine Iceberg-Tabelle zu erstellen.

  • So verwenden Sie den benutzerdefinierten Iceberg-Katalog:

    USE `CATALOG_NAME`;
  • Erstellen Sie einen Namespace:

    CREATE NAMESPACE IF NOT EXISTS NAMESPACE_NAME;
  • Verwenden Sie den erstellten Namespace:

    USE NAMESPACE_NAME;
  • So erstellen Sie eine Iceberg-Tabelle:

    CREATE TABLE TABLE_NAME (id int, data string) USING ICEBERG;
  • So fügen Sie eine Tabellenzeile ein:

    INSERT INTO TABLE_NAME VALUES (1, "first row");
  • So fügen Sie eine Tabellenspalte hinzu:

    ALTER TABLE TABLE_NAME ADD COLUMNS (newDoubleCol double);
  • So rufen Sie Tabellenmetadaten auf:

    DESCRIBE EXTENDED TABLE_NAME;
  • Listen Sie die Tabellen im Namespace auf:

    SHOW TABLES;

Zeppelin-Notebook

  1. Rufen Sie in der Google Cloud Console die Seite Dataproc-Cluster auf.

    Zu Dataproc-Clustern

  2. Klicken Sie auf den Namen des Clusters, den Sie verwenden möchten.

    Die Seite Clusterdetails wird geöffnet.

  3. Klicken Sie im Navigationsmenü auf Weboberflächen.

  4. Klicken Sie unter Komponentengateway auf Zeppelin. Die Seite Zeppelin-Notebook wird geöffnet.

  5. Klicken Sie im Navigationsmenü auf Notizbuch und dann auf + Neue Notiz erstellen.

  6. Geben Sie im Dialogfeld einen Namen für das Notizbuch ein. Lassen Sie Spark als Standard-Interpreter ausgewählt.

  7. Klicken Sie auf Erstellen. Ein neues Notebook wird erstellt.

  8. Klicken Sie im Notebook auf das Menü „Einstellungen“ und dann auf Interpreter.

  9. Suchen Sie im Feld Nach Interpretern suchen nach Spark.

  10. Klicken Sie auf Bearbeiten.

  11. Geben Sie im Feld Spark.jars den URI der Spark-JAR-Datei ein.

    https://storage-download.googleapis.com/maven-central/maven2/org/apache/iceberg/iceberg-spark-runtime-3.5_2.12/1.5.2/iceberg-spark-runtime-3.5_2.12-1.5.2.jar,gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.5.2-1.0.0-beta.jar
    
  12. Klicken Sie auf Speichern.

  13. Klicken Sie auf OK.

  14. Kopieren Sie den folgenden PySpark-Code in Ihr Zeppelin-Notebook.

    %pyspark
    from pyspark.sql import SparkSession
    spark = SparkSession.builder \
    .appName("BigQuery Metastore Iceberg") \
    .config("spark.sql.catalog.CATALOG_NAME", "org.apache.iceberg.spark.SparkCatalog") \
    .config("spark.sql.catalog.CATALOG_NAME.catalog-impl", "org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog") \
    .config("spark.sql.catalog.CATALOG_NAME.gcp_project", "PROJECT_ID") \
    .config("spark.sql.catalog.CATALOG_NAME.gcp_location", "LOCATION") \
    .config("spark.sql.catalog.CATALOG_NAME.warehouse", "WAREHOUSE_DIRECTORY") \
    .getOrCreate()
    spark.sql("select version()").show()
    spark.sql("USE `CATALOG_NAME`;")
    spark.sql("CREATE NAMESPACE IF NOT EXISTS NAMESPACE_NAME;")
    spark.sql("USE NAMESPACE_NAME;")
    spark.sql("CREATE TABLE TABLE_NAME (id int, data string) USING ICEBERG;")
    spark.sql("DESCRIBE TABLE_NAME;").show()

    Ersetzen Sie Folgendes:

    • CATALOG_NAME: Der Name des Spark-Katalogs, der für den SQL-Job verwendet werden soll.
    • PROJECT_ID: die ID des Google Cloud-Projekts, das den Dataproc-Cluster enthält.
    • WAREHOUSE_DIRECTORY: den Cloud Storage-Ordner, der Ihr Data Warehouse enthält. Dieser Wert beginnt mit gs://.
    • NAMESPACE_NAME: Der Name des Namespace, der auf Ihre Spark-Tabelle verweist.
    • WAREHOUSE_DIRECTORY: Der URI des Cloud Storage-Ordners, in dem Ihr Data Warehouse gespeichert ist.
    • TABLE_NAME: ein Tabellenname für Ihre Spark-Tabelle.
  15. Klicken Sie auf das Symbol „Ausführen“ oder drücken Sie die Taste Shift-Enter, um den Code auszuführen. Wenn der Job abgeschlossen ist, wird in der Statusmeldung „Spark-Job abgeschlossen“ angezeigt und in der Ausgabe der Tabelleninhalt:

Nächste Schritte