BigQuery-Metastore mit Dataproc Serverless verwenden
In diesem Dokument wird beschrieben, wie Sie den BigQuery-Metastore mit Dataproc Serverless verwenden.
Hinweise
- Aktivieren Sie die Abrechnung für Ihr Google Cloud -Projekt. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist
Aktivieren Sie die BigQuery- und Dataproc APIs.
Optional: Informationen zur Funktionsweise des BigQuery-Metastores und dazu, warum Sie ihn verwenden sollten.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Verwenden von Spark und Dataproc Serverless mit BigQuery Metastore als Metadatenspeicher benötigen:
-
BigQuery-Metastore-Tabellen in Spark erstellen:
-
Dataproc-Worker (
roles/dataproc.worker
) für das Dataproc Serverless-Dienstkonto im Projekt -
BigQuery-Dateneditor (
roles/bigquery.dataEditor
) für das serverlose Dataproc-Dienstkonto im Projekt -
Storage-Objekt-Administrator (
roles/storage.objectAdmin
) für das Dataproc Serverless-Dienstkonto im Projekt
-
Dataproc-Worker (
-
BigQuery-Metastore-Tabellen in BigQuery abfragen:
-
BigQuery-Datenbetrachter (
roles/bigquery.dataViewer
) für das Projekt -
BigQuery-Nutzer (
roles/bigquery.user
) für das Projekt -
Storage-Objekt-Betrachter (
roles/storage.objectViewer
) für das Projekt
-
BigQuery-Datenbetrachter (
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 BigQuery mit Dataproc Serverless:
- Erstellen Sie eine Datei mit den Befehlen, die Sie im BigQuery-Metastore ausführen möchten.
- Stellen Sie eine Verbindung zu Ihrer bevorzugten Open-Source-Software-Engine her.
- Reichen Sie einen Batchjob mit der Methode Ihrer Wahl ein, z. B. Spark SQL oder PySpark.
BigQuery-Metastore mit Spark verbinden
In der folgenden Anleitung wird beschrieben, wie Sie Dataproc Serverless mit dem BigQuery-Metastore verbinden:
SparkSQL
Führen Sie die folgenden Schritte aus, um einen Spark SQL-Batchjob einzureichen.
Erstellen Sie eine SQL-Datei mit den Spark SQL-Befehlen, die Sie im BigQuery-Metastore ausführen möchten. Mit diesem Befehl werden beispielsweise ein Namespace und eine Tabelle erstellt.
CREATE NAMESPACE `CATALOG_NAME`.NAMESPACE_NAME; CREATE TABLE `CATALOG_NAME`.NAMESPACE_NAME.TABLE_NAME (id int, data string) USING ICEBERG LOCATION 'WAREHOUSE_DIRECTORY';
Ersetzen Sie Folgendes:
CATALOG_NAME
: Der Katalogname, der auf Ihre Spark-Tabelle verweist.NAMESPACE_NAME
: Der Name des Namespace, der auf Ihre Spark-Tabelle verweist.TABLE_NAME
: Name der Spark-Tabelle.WAREHOUSE_DIRECTORY
: Der URI des Cloud Storage-Ordners, in dem Ihr Data Warehouse gespeichert ist.
Reichen Sie einen Spark SQL-Batchjob ein, indem Sie den folgenden
gcloud dataproc batches submit spark-sql
-gcloud-Befehl in der Befehlszeile ausführen:gcloud dataproc batches submit spark-sql SQL_SCRIPT_PATH \ --project=PROJECT_ID \ --region=REGION \ --subnet=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \ --deps-bucket=BUCKET_PATH \ --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"
Ersetzen Sie Folgendes:
SQL_SCRIPT_PATH
: Pfad zur SQL-Datei, die vom Batchjob verwendet wird.PROJECT_ID
: Die ID des Google Cloud -Projekts, in dem der Batchjob ausgeführt werden soll.REGION
: die Region, in der Ihre Arbeitslast ausgeführt wird.SUBNET_NAME
: Optional: Der Name eines VPC-Subnetzes in derREGION
, für das der private Google-Zugriff aktiviert ist und das die anderen Anforderungen an das Sitzungssubnetz erfüllt.LOCATION
: Der Speicherort, an dem der Batchjob ausgeführt werden soll.BUCKET_PATH
: der Speicherort des Cloud Storage-Bucket, in den die Workload-Abhängigkeiten hochgeladen werden sollen. DieWAREHOUSE_FOLDER
befindet sich in diesem Bucket. Dasgs://
-URI-Präfix des Buckets ist nicht erforderlich. Sie können den Bucket-Pfad oder den Bucket-Namen angeben, z. B.mybucketname1
.
Weitere Informationen zum Einreichen von Spark-Batchjobs finden Sie unter Spark-Batcharbeitslast ausführen.
PySpark
So reichen Sie einen PySpark-Batchjob ein:
Erstellen Sie eine Python-Datei mit den PySpark-Befehlen, die Sie im BigQuery-Metastore ausführen möchten.
Mit dem folgenden Befehl wird beispielsweise eine Spark-Umgebung eingerichtet, um mit Iceberg-Tabellen zu interagieren, die im BigQuery-Metastore gespeichert sind. Der Befehl erstellt dann einen neuen Namespace und eine Iceberg-Tabelle in diesem Namespace.
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("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 LOCATION 'WAREHOUSE_DIRECTORY';")
Ersetzen Sie Folgendes:
PROJECT_ID
: Die ID des Google Cloud -Projekts, in dem der Batchjob ausgeführt werden soll.LOCATION
: den Speicherort der BigQuery-Ressourcen.CATALOG_NAME
: Der Katalogname, der auf Ihre Spark-Tabelle verweist.TABLE_NAME
: Name der Spark-Tabelle.WAREHOUSE_DIRECTORY
: Der URI des Cloud Storage-Ordners, in dem Ihr Data Warehouse gespeichert ist.NAMESPACE_NAME
: Der Name des Namespace, der auf Ihre Spark-Tabelle verweist.
Reichen Sie den Batchjob mit dem folgenden Befehl
gcloud dataproc batches submit pyspark
ein.gcloud dataproc batches submit pyspark PYTHON_SCRIPT_PATH \ --version=2.2 \ --project=PROJECT_ID \ --region=REGION \ --deps-bucket=BUCKET_PATH \ --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"
Ersetzen Sie Folgendes:
PYTHON_SCRIPT_PATH
: Der Pfad zum Python-Script, das vom Batchjob verwendet wird.PROJECT_ID
: Die ID des Google Cloud -Projekts, in dem der Batchjob ausgeführt werden soll.REGION
: die Region, in der Ihre Arbeitslast ausgeführt wird.BUCKET_PATH
: der Speicherort des Cloud Storage-Bucket, in den die Abhängigkeiten der Arbeitslast hochgeladen werden sollen. Dasgs://
-URI-Präfix des Buckets ist nicht erforderlich. Sie können den Bucket-Pfad oder den Bucket-Namen angeben, z. B.mybucketname1
.
Weitere Informationen zum Einreichen von PySpark-Batchjobs finden Sie in der PySpark-gcloud-Referenz.
Nächste Schritte
- Richten Sie optionale BigQuery-Metastore-Funktionen ein.
- Tabellen aus Spark in der BigQuery-Konsole ansehen und abfragen