In diesem Dokument wird erläutert, wie Sie Apache Spark und Apache Hive für die Verwendung des Lakehouse-Laufzeitkatalogs einrichten und konfigurieren. Sie erfahren, wie Sie einen Apache Hive-Katalog erstellen, Ihre Spark-Sitzungen so konfigurieren, dass sie eine Verbindung zum Metastore herstellen, und Arbeitslasten ausführen, um Tabellen zu erstellen, die Sie direkt in BigQuery abfragen können.
Hinweis
- Lesen Sie den Artikel Hive-Kataloge im Lakehouse-Laufzeitkatalog, um zu erfahren, wie Spark eine Verbindung zum Lakehouse-Laufzeitkatalog herstellt.
- Sehen Sie sich die unterstützten Speicherformate und Datentypen an.
- Sehen Sie sich die Einschränkungen und Überlegungen an.
- Melden Sie sich in Ihrem Google Cloud Konto an. Wenn Sie noch kein Konto haben Google Cloud, erstellen Sie ein Konto, um die Leistung unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Lakehouse for Apache Iceberg, Dataproc API APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Verify that billing is enabled for your Google Cloud project.
Enable the Lakehouse for Apache Iceberg, Dataproc API APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zur Verwendung des Lakehouse-Laufzeitkatalogs benötigen:
-
Managed Service for Apache Spark-Cluster erstellen:
Dataproc-Bearbeiter (
roles/dataproc.editor) -
Clusterdienstkonto:
- Dataproc-Worker (
roles/dataproc.worker) - Storage Object User (
roles/storage.objectUser) - BigLake-Bearbeiter (
roles/biglake.editor) - Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer)
- Dataproc-Worker (
-
Schreibzugriff auf alle Lakehouse-Laufzeitkatalogressourcen:
BigLake-Bearbeiter (
roles/biglake.editor) -
Schreibgeschützter Zugriff auf alle Lakehouse-Laufzeitkatalogressourcen:
BigLake-Betrachter (
roles/biglake.viewer)
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.
Eine Anleitung finden Sie unter Einzelne Rolle zuweisen.
Allgemeiner Workflow
Wenn Sie den Lakehouse-Laufzeitkatalog mit Spark und Hive verwenden möchten, folgen Sie diesem allgemeinen Workflow:
- Erstellen Sie einen Lakehouse for Apache Iceberg Hive-Katalog.
- Konfigurieren Sie Ihre Spark-Sitzung mit dem gewünschten Tool (z. B. Managed Service for Apache Spark oder BigQuery Studio).
- Führen Sie Datenbank- und Tabellenvorgänge in Ihrer Spark-Sitzung aus.
- Senden Sie Batcharbeitslasten an Managed Service for Apache Spark und fragen Sie die resultierenden Tabellen direkt aus BigQuery ab.
Lakehouse Hive-Katalog erstellen
Wenn Sie den Lakehouse-Laufzeitkatalog mit Spark und Hive verwenden möchten, müssen Sie zuerst einen Hive-Katalog erstellen.
Ein Lakehouse Hive-Katalog ist eine Sammlung von Hive-Datenbanken. Bevor Sie Spark-Jobs ausführen, erstellen Sie einen Katalog, um ihn im Lakehouse-Metastore zu registrieren. Der Katalog hat einen Namen und einen Cloud Storage-Speicherort, an dem sich die Hive-Daten befinden.
Console
Öffnen Sie in der Google Cloud Console die Seite Lakehouse.
Klicken Sie auf Katalog erstellen.
Wählen Sie Lakehouse-Laufzeitkatalog aus.
Wählen Sie unter Katalogtyp die Option Hive-Metastore aus.
Geben Sie im Feld Cloud Storage-Bucket auswählen den Namen des Cloud Storage-Buckets ein, der mit Ihrem Katalog verwendet werden soll. Alternativ können Sie auf Durchsuchen klicken, um einen vorhandenen Bucket auszuwählen oder einen neuen zu erstellen.
Geben Sie unter Katalog-ID einen Namen für Ihren Lakehouse Hive-Katalog ein.
Geben Sie unter Primärer Standort dieselbe Region wie für Ihren Bucket an.
Klicken Sie auf Erstellen.
gcloud
Führen Sie den folgenden Befehl aus, um einen Hive-Katalog zu erstellen:
gcloud biglake hive catalogs create LAKEHOUSE_CATALOG_ID \
--project=PROJECT_ID
--location-uri="gs://GCS_WAREHOUSE_PATH" \
--primary_location=REGION \
--description="DESCRIPTION"
Dabei gilt:
LAKEHOUSE_CATALOG_ID: der Name des Hive-Katalogs.GCS_WAREHOUSE_PATH: der Cloud Storage-Pfad, in dem Ihr Hive-Data-Warehouse gespeichert ist.PROJECT_ID: Ihre Google Cloud Projekt-ID.REGION: die primäre Region des Metastores. Bei Buckets mit einer einzelnen Region muss sie mit der Bucket-Region übereinstimmen. Bei Buckets mit zwei oder mehreren Regionen muss sie eine der Regionen sein und der Ort, an dem sich das primäre Replikat des Metastores befinden soll. Die andere Region wird zum sekundären Replikat.DESCRIPTION: eine Beschreibung des Katalogs.
curl
- Führen Sie den folgenden Befehl aus, um einen Hive-Katalog zu erstellen:
curl -X POST -s -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-d '{"locationUri": "gs://GCS_WAREHOUSE_PATH", "description": "DESCRIPTION"}' \
-H "Content-Type:application/json" \ "https://biglake.googleapis.com/hive/v1/projects/PROJECT_ID/catalogs?hiveCatalogId=LAKEHOUSE_CATALOG_ID&primary_location=REGION"
Dabei gilt:
LAKEHOUSE_CATALOG_ID: der Name des Hive-Katalogs.GCS_WAREHOUSE_PATH: der Cloud Storage-Pfad, in dem Ihr Hive-Data-Warehouse gespeichert ist.PROJECT_ID: Ihre Google Cloud Projekt-ID.REGION: die primäre Region des Metastores. Bei Buckets mit einer einzelnen Region muss sie mit der Bucket-Region übereinstimmen. Bei Buckets mit zwei oder mehreren Regionen muss sie eine der Regionen sein und der Ort, an dem sich das primäre Replikat des Metastores befinden soll. Die andere Region wird zum sekundären Replikat.DESCRIPTION: eine Beschreibung des Katalogs.
Spark und Hive konfigurieren und verwenden
Wenn Sie den Lakehouse-Laufzeitkatalog verwenden möchten, müssen Sie Ihre Spark-Sitzung mit bestimmten Attributen konfigurieren. Sie können diese Attribute beim Erstellen eines Managed Service for Apache Spark-Clusters festlegen oder sie jedes Mal angeben, wenn Sie eine Sitzung erstellen.
Diese Attribute enthalten Details wie die Client Factory, Google Cloud die Projekt-ID, den Standardkatalog und das Data-Warehouse-Verzeichnis. Nachdem die Sitzung eingerichtet wurde, können Sie grundlegende Vorgänge ausführen, z. B. vorhandene Datenbanken auflisten, neue Datenbanken erstellen, Tabellen definieren und Daten einfügen.
spark-sql
- Stellen Sie über SSH eine Verbindung zum primären Knoten Ihres Managed Service for Apache Spark-Clusters her.
Führen Sie
spark-sqlin der Befehlszeile mit den folgenden Attributen aus, um eine interaktive Spark SQL-Sitzung zu starten:spark-sql \ --conf spark.hive.metastore.client.factory.class=com.google.cloud.bigquery.metastore.client.BigLakeMetastoreClientFactory \ --conf spark.hive.metastore.blms.project.id=PROJECT_ID \ --conf spark.hive.metastore.blms.catalog.default=LAKEHOUSE_CATALOG_ID \ --conf spark.hive.metastore.warehouse.dir=gs://GCS_WAREHOUSE_PATHNach dem Start der Sitzung stellt Spark eine Verbindung zum Lakehouse-Laufzeitkatalog her.
Führen Sie die folgenden Befehle aus, um Ressourcen zu erstellen und abzufragen:
-- Show all the databases in the current project. SHOW DATABASES; -- Create a database. CREATE DATABASE spark_blms_database; -- Create a Parquet datasource table. CREATE TABLE spark_blms_database.parquet_quick_start (id INT, name STRING) USING PARQUET; -- Insert data into the table. INSERT INTO TABLE spark_blms_database.parquet_quick_start VALUES (1, 'my-first-user');Dabei gilt:
PROJECT_ID: Ihre Google Cloud Projekt ID.LAKEHOUSE_CATALOG_ID: der Name des Hive-Katalogs.GCS_WAREHOUSE_PATH: der Cloud Storage-Pfad, in dem Ihr Hive-Data-Warehouse gespeichert ist.
Jupyter-Notebook
- Folgen Sie der Anleitung, um ein Jupyter-Notebook in einem Managed Service for Apache Spark-Cluster auszuführen.
- Rufen Sie die Jupyter-Weboberfläche auf dem Tab Weboberflächen der Detailseite des Clusters in der Google Cloud Console auf.
Erstellen Sie in einem neuen Notebook eine Spark-Sitzung und führen Sie dann die folgenden Abfragen aus:
from pyspark.sql import SparkSession # If a Spark session exists, stop it first by running spark.stop() spark = SparkSession.builder\ .master("local")\ .appName("Lakehouse runtime catalog tutorial")\ .config("spark.hive.metastore.client.factory.class", "com.google.cloud.bigquery.metastore.client.BigLakeMetastoreClientFactory")\ .config("spark.hive.metastore.blms.project.id", "PROJECT_ID")\ .config("spark.hive.metastore.warehouse.dir", "gs://GCS_WAREHOUSE_PATH")\ .config("spark.hive.metastore.blms.catalog.default", "LAKEHOUSE_CATALOG_ID")\ .getOrCreate() # Show all the databases. df = spark.sql("SHOW DATABASES;") df.show() # Create a database. spark.sql("CREATE DATABASE jupyter_blms_db") # Create a Parquet datasource table. spark.sql("CREATE TABLE jupyter_blms_db.parquet_table(id INT, name STRING) USING PARQUET") # Insert data into the table. spark.sql("INSERT INTO TABLE jupyter_blms_db.parquet_table VALUES (1, 'my-first-user');") # Query from table. spark.sql("SELECT * FROM jupyter_blms_db.parquet_table;").show()Dabei gilt:
PROJECT_ID: Ihre Google Cloud Projekt ID.GCS_WAREHOUSE_PATH: der Cloud Storage-Pfad, in dem Ihr Hive-Data-Warehouse gespeichert ist.LAKEHOUSE_CATALOG_ID: der Name des Hive-Katalogs.
BigQuery-Notebook
Wechseln Sie in der Google Cloud Console zu BigQuery.
Klicken Sie im Bereich Explorer auf + HINZUFÜGEN und dann auf Python Notebook.
Konfigurieren Sie in einer Codezelle die Attribute für die Managed Service for Apache Spark-Sitzung und den Lakehouse-Laufzeitkatalog:
from google.cloud.dataproc_spark_connect import DataprocSparkSession from google.cloud.dataproc_v1 import Session import os os.environ['DATAPROC_SPARK_CONNECT_DEFAULT_DATASOURCE'] = "" session = Session() session.environment_config.execution_config.ttl = {"seconds": 864000} session.runtime_config.version = "2.3" session.runtime_config.properties = { "spark.hive.metastore.blms.project.id": "PROJECT_ID", "spark.hive.metastore.blms.catalog.default": "LAKEHOUSE_CATALOG_ID", "spark.hive.metastore.warehouse.dir": "gs://GCS_WAREHOUSE_PATH", "spark.hive.metastore.client.factory.class": "com.google.cloud.bigquery.metastore.client.BigLakeMetastoreClientFactory", "spark.sql.catalogImplementation": "hive" } spark = DataprocSparkSession.builder.dataprocSessionConfig(session).getOrCreate() print("Spark session created successfully")Erstellen Sie in einer anderen Codezelle eine Datenbank und eine Tabelle:
# Create a database spark.sql("CREATE DATABASE bq_spark_blms_database;") # Create a parquet datasource table spark.sql("CREATE TABLE bq_spark_blms_database.parquet_quick_start (id INT, name STRING) USING PARQUET;") # Insert data into the table spark.sql("INSERT INTO TABLE bq_spark_blms_database.parquet_quick_start VALUES (1, 'my-first-user');") # Query from table spark.sql("select * from bq_spark_blms_database.parquet_quick_start;").show()Dabei gilt:
PROJECT_ID: Ihre Google Cloud Projekt ID.GCS_WAREHOUSE_PATH: der Cloud Storage-Pfad, in dem Ihr Hive-Data-Warehouse gespeichert ist.LAKEHOUSE_CATALOG_ID: der Name des Hive-Katalogs.
Hive-Befehlszeile
Wenn Sie die Hive-Befehlszeile verwenden möchten, müssen Sie sie so konfigurieren, dass sie eine Verbindung zum Metastore herstellt. Dazu haben Sie zwei Möglichkeiten:
- Option 1: Permanente Konfiguration Aktualisieren Sie die Datei
/etc/hive/conf/hive-site.xmlauf Ihrem primären Knoten. - Option 2: Temporäre Konfiguration Geben Sie beim Starten der Befehlszeile Konfigurationsflags an.
So konfigurieren Sie die Befehlszeile und führen Ihre Abfragesitzung aus:
- Stellen Sie über SSH eine Verbindung zum primären Knoten Ihres Managed Service for Apache Spark-Clusters her.
Führen Sie je nach Konfigurationsmethode einen der folgenden Schritte aus:
Permanente Konfiguration (Option 1):
Öffnen Sie
/etc/hive/conf/hive-site.xmlauf dem primären Knoten und fügen Sie die folgenden Attribute hinzu:<property> <name>hive.metastore.blms.project.id</name> <value>PROJECT_ID</value> <description></description> </property> <property> <name>hive.metastore.client.factory.class</name> <value>com.google.cloud.bigquery.metastore.client.BigLakeMetastoreClientFactory</value> <description></description> </property> <property> <name>hive.metastore.blms.catalog.default</name> <value>LAKEHOUSE_CATALOG_ID</value> <description></description> </property> <property> <name>hive.metastore.warehouse.dir</name> <value>gs://GCS_WAREHOUSE_PATH</value> <description></description> </property>Starten Sie die Hive-Befehlszeile:
hive
Temporäre Konfiguration beim Starten (Option 2): Starten Sie die Hive-Befehlszeile mit Konfigurationsflags:
hive \ --hiveconf hive.metastore.blms.project.id="PROJECT_ID" \ --hiveconf hive.metastore.blms.catalog.default="LAKEHOUSE_CATALOG_ID" \ --hiveconf hive.metastore.client.factory.class=com.google.cloud.bigquery.metastore.client.BigLakeMetastoreClientFactory \ --hiveconf hive.metastore.warehouse.dir="gs://GCS_WAREHOUSE_PATH"
Führen Sie dann die folgenden Befehle in der Hive-Befehlszeilensitzung aus:
show databases; create database hive_query_test; create table hive_query_test.parquet_table (id INT, name STRING) stored as PARQUET; select * from hive_query_test.parquet_table;Dabei gilt:
PROJECT_ID: Ihre Google Cloud Projekt ID.LAKEHOUSE_CATALOG_ID: der Name des Hive-Katalogs.GCS_WAREHOUSE_PATH: der Cloud Storage-Pfad, in dem Ihr Hive-Data-Warehouse gespeichert ist.
Managed Service for Apache Spark-Batchjob senden
Sie können eine PySpark-Batcharbeitslast an Managed Service for Apache Spark senden, die den Lakehouse-Laufzeitkatalog verwendet.
Dieses PySpark-Snippet initialisiert eine Spark-Sitzung, die für die Verbindung mit dem Lakehouse-Laufzeitkatalog konfiguriert ist. Es legt wichtige Attribute fest,z. B. die Lakehouse-Client Factory, Google Cloud die Projekt-ID, den Standard katalog und das Data-Warehouse-Verzeichnis. Nachdem die Sitzung eingerichtet wurde, zeigt der Code, wie Sie mit Spark SQL-Befehlen vorhandene Datenbanken auflisten, eine neue Datenbank erstellen und eine Tabelle im Parquet-Format in dieser Datenbank definieren.
Erstellen Sie eine Python-Datei mit einem PySpark-Job:
from pyspark.sql import SparkSession spark = ( SparkSession.builder.appName("Lakehouse runtime catalog tutorial") .config( "spark.hive.metastore.client.factory.class", "com.google.cloud.bigquery.metastore.client.BigLakeMetastoreClientFactory") .config("spark.hive.metastore.blms.project.id", "PROJECT_ID") .config("spark.hive.metastore.blms.catalog.default", "LAKEHOUSE_CATALOG_ID") .config( "spark.hive.metastore.warehouse.dir", "gs://GCS_WAREHOUSE_PATH", ) .enableHiveSupport() .getOrCreate() ) # Show all the databases. spark.sql("SHOW DATABASES;").show() # Create a database. spark.sql("CREATE DATABASE dp_serverless_test") # Create a Parquet datasource table. spark.sql( "CREATE TABLE dp_serverless_test.parquet_table(id INT, name STRING) USING" " PARQUET" ) # Query from table. spark.sql("SELECT * from dp_serverless_test.parquet_table").show()Dabei gilt:
PROJECT_ID: Ihre Google Cloud Projekt-ID.LAKEHOUSE_CATALOG_ID: der Name des Hive-Katalogs.GCS_WAREHOUSE_PATH: der Cloud Storage-Pfad, in dem Ihr Hive-Data-Warehouse gespeichert ist.
Senden Sie den Batchjob:
gcloud dataproc batches submit pyspark PYTHON_SCRIPT_FILE \ --version=2.2 \ --project=PROJECT_ID \ --region=REGION \ --deps-bucket=gs://CLOUD_STORAGE_BUCKETDabei gilt:
PYTHON_SCRIPT_FILE: Der Pfad zur PySpark-Anwendungsdatei. Dies kann ein lokaler Pfad oder der Cloud Storage-Objektpfad sein.PROJECT_ID: Ihre Projekt-ID.REGION: Die Region, in der der Batchjob ausgeführt werden soll.CLOUD_STORAGE_BUCKET: Der Name des Cloud Storage-Buckets, der zum Staging der Abhängigkeiten einer Arbeitslast verwendet wird.
Tabelle aus BigQuery abfragen
Nachdem Sie Ressourcen aus Spark im Lakehouse-Laufzeitkatalog erstellt haben, können Sie sie in BigQuery Studio abfragen.
Wechseln Sie in der Google Cloud Console zu BigQuery.
Geben Sie im Abfrageeditor die folgende Anweisung ein:
SELECT * FROM `PROJECT_ID.LAKEHOUSE_CATALOG_ID.DATABASE_NAME.TABLE_NAME`;Dabei gilt:
PROJECT_ID: Ihre Projekt-ID.LAKEHOUSE_CATALOG_ID: der Name Ihres Hive-Katalogs.DATABASE_NAME: der Name Ihrer Datenbank.TABLE_NAME: der Name Ihrer Tabelle.