Ce document explique comment configurer Apache Spark et Apache Hive pour utiliser le catalogue du runtime Lakehouse. Vous allez apprendre à créer un catalogue Apache Hive, à configurer vos sessions Spark pour vous connecter au metastore et à exécuter des charges de travail pour créer des tables que vous pourrez interroger directement dans BigQuery.
Avant de commencer
- Consultez À propos des catalogues Hive dans le catalogue d'environnements d'exécution Lakehouse pour comprendre comment Spark se connecte au catalogue d'environnements d'exécution Lakehouse.
- Consultez la page Formats de stockage et types de données compatibles.
- Consultez Limites et remarques.
- Connectez-vous à votre compte Google Cloud . Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits sans frais pour exécuter, tester et déployer des charges de travail.
-
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.
Rôles requis
Pour obtenir les autorisations nécessaires pour utiliser le catalogue du runtime Lakehouse, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet :
-
Créez un cluster Managed Service pour Apache Spark :
Éditeur Dataproc (
roles/dataproc.editor) -
Compte de service du cluster :
- Nœud de calcul Dataproc (
roles/dataproc.worker) - Utilisateur d'objets Storage (
roles/storage.objectUser) - Éditeur BigLake (
roles/biglake.editor) - Consommateur Service Usage (
roles/serviceusage.serviceUsageConsumer)
- Nœud de calcul Dataproc (
-
Accès en écriture à toutes les ressources du catalogue d'environnements d'exécution Lakehouse :
Éditeur BigLake (
roles/biglake.editor) -
Accès en lecture seule à toutes les ressources du catalogue d'environnements d'exécution Lakehouse :
Lecteur BigLake (
roles/biglake.viewer)
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.
Pour savoir comment procéder, consultez Attribuer un rôle unique.
Workflow général
Pour utiliser le catalogue d'environnements d'exécution Lakehouse avec Spark et Hive, suivez ce workflow général :
- Créez un catalogue Hive Lakehouse pour Apache Iceberg.
- Configurez votre session Spark à l'aide de l'outil de votre choix (par exemple, Managed Service pour Apache Spark ou BigQuery Studio).
- Effectuez des opérations sur les bases de données et les tables dans votre session Spark.
- Envoyez des charges de travail par lot à Managed Service pour Apache Spark et interrogez les tables résultantes directement depuis BigQuery.
Créer un catalogue Hive Lakehouse
Pour utiliser le catalogue d'environnements d'exécution Lakehouse avec Spark et Hive, vous devez d'abord créer un catalogue Hive.
Un catalogue Lakehouse Hive est une collection de bases de données Hive. Avant d'exécuter des jobs Spark, créez un catalogue pour l'enregistrer dans Lakehouse Metastore. Le catalogue comporte un nom et un emplacement Cloud Storage où résident les données Hive.
Console
Dans la console Google Cloud , ouvrez la page Lakehouse.
Cliquez sur Créer un catalogue.
Sélectionnez Catalogue d'environnements d'exécution Lakehouse.
Pour Type de catalogue, sélectionnez Hive Metastore.
Dans le champ Sélectionner un bucket Cloud Storage, saisissez le nom du bucket Cloud Storage à utiliser avec votre catalogue. Vous pouvez également cliquer sur Parcourir pour choisir un bucket existant ou en créer un.
Pour ID du catalogue, donnez un nom à votre catalogue Hive Lakehouse.
Pour Emplacement principal, spécifiez la même région que celle de votre bucket.
Cliquez sur Créer.
gcloud
Pour créer un catalogue Hive, exécutez la commande suivante :
gcloud biglake hive catalogs create LAKEHOUSE_CATALOG_ID \
--project=PROJECT_ID
--location-uri="gs://GCS_WAREHOUSE_PATH" \
--primary_location=REGION \
--description="DESCRIPTION"
Remplacez les éléments suivants :
LAKEHOUSE_CATALOG_ID: nom du catalogue Hive.GCS_WAREHOUSE_PATH: chemin d'accès Cloud Storage qui stocke votre entrepôt Hive.PROJECT_ID: ID de votre projet Google Cloud.REGION: région principale du metastore. Pour les buckets à région unique, elle doit correspondre à la région du bucket. Pour les buckets birégionaux ou multirégionaux, il doit s'agir de l'une des régions qui les composent et de l'emplacement prévu pour la réplique principale du metastore. L'autre région devient l'instance répliquée secondaire.DESCRIPTION: description du catalogue.
curl
- Pour créer un catalogue Hive, exécutez la commande suivante :
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"
Remplacez les éléments suivants :
LAKEHOUSE_CATALOG_ID: nom du catalogue Hive.GCS_WAREHOUSE_PATH: chemin d'accès Cloud Storage qui stocke votre entrepôt Hive.PROJECT_ID: ID de votre projet Google Cloud .REGION: région principale du metastore. Pour les buckets à région unique, elle doit correspondre à la région du bucket. Pour les buckets birégionaux ou multirégionaux, il doit s'agir de l'une des régions qui les composent et de l'emplacement prévu pour la réplique principale du metastore. L'autre région devient l'instance répliquée secondaire.DESCRIPTION: description du catalogue.
Configurer et utiliser Spark et Hive
Pour utiliser le catalogue d'exécution Lakehouse, vous devez configurer votre session Spark avec des propriétés spécifiques. Vous pouvez définir ces propriétés lorsque vous créez un cluster Managed Service pour Apache Spark ou les spécifier chaque fois que vous créez une session.
Ces propriétés incluent des informations telles que la fabrique de clients, Google Cloud l'ID du projet, le catalogue par défaut et le répertoire de l'entrepôt. Une fois la session établie, vous pouvez effectuer des opérations fondamentales telles que lister les bases de données existantes, en créer, définir des tables et insérer des données.
spark-sql
- Utilisez SSH pour vous connecter au nœud principal de votre cluster Managed Service pour Apache Spark.
Exécutez
spark-sqlsur la ligne de commande avec les propriétés suivantes pour démarrer une session SparkSQL interactive :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_PATHUne fois la session démarrée, Spark se connecte au catalogue Lakehouse Runtime.
Exécutez les commandes suivantes pour créer et interroger des ressources :
-- 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');Remplacez les éléments suivants :
PROJECT_ID: ID de votre projet Google Cloud .LAKEHOUSE_CATALOG_ID: nom du catalogue Hive.GCS_WAREHOUSE_PATH: chemin Cloud Storage qui stocke votre entrepôt Hive.
Notebook Jupyter
- Suivez les instructions pour exécuter un notebook Jupyter sur un cluster Managed Service pour Apache Spark.
- Accédez à l'interface Web Jupyter depuis l'onglet Interfaces Web de la page d'informations du cluster dans la console Google Cloud .
Dans un nouveau notebook, créez une session Spark, puis exécutez les requêtes suivantes :
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()Remplacez les éléments suivants :
PROJECT_ID: ID de votre projet Google Cloud .GCS_WAREHOUSE_PATH: chemin Cloud Storage qui stocke votre entrepôt Hive.LAKEHOUSE_CATALOG_ID: nom du catalogue Hive.
Notebook BigQuery
Dans la console Google Cloud , accédez à BigQuery.
Dans le volet Explorateur, cliquez sur + AJOUTER, puis sur Notebook Python.
Dans une cellule de code, configurez les propriétés du catalogue de session Managed Service pour Apache Spark et du runtime Lakehouse :
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")Dans une autre cellule de code, créez une base de données et une table :
# 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()Remplacez les éléments suivants :
PROJECT_ID: ID de votre projet Google Cloud .GCS_WAREHOUSE_PATH: chemin Cloud Storage qui stocke votre entrepôt Hive.LAKEHOUSE_CATALOG_ID: nom du catalogue Hive.
CLI Hive
Pour utiliser la CLI Hive, vous devez la configurer pour qu'elle se connecte au metastore. Pour cela, deux possibilités s'offrent à vous :
- Option 1 : Configuration permanente Mettez à jour le fichier
/etc/hive/conf/hive-site.xmlsur votre nœud principal. - Option 2 : Configuration temporaire Fournissez des indicateurs de configuration lorsque vous démarrez la CLI.
Pour configurer la CLI et exécuter votre session de requête, procédez comme suit :
- Utilisez SSH pour vous connecter au nœud principal de votre cluster Managed Service pour Apache Spark.
Selon votre méthode de configuration, effectuez l'une des opérations suivantes :
Pour configurer de manière permanente (option 1) :
Ouvrez
/etc/hive/conf/hive-site.xmlsur le nœud principal et ajoutez les propriétés suivantes :<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>Démarrez la CLI Hive :
hive
Pour configurer temporairement au démarrage (option 2) : démarrez la CLI Hive avec des indicateurs de configuration :
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"
Exécutez ensuite les commandes suivantes dans la session Hive CLI :
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;Remplacez les éléments suivants :
PROJECT_ID: ID de votre projet Google Cloud .LAKEHOUSE_CATALOG_ID: nom du catalogue Hive.GCS_WAREHOUSE_PATH: chemin Cloud Storage qui stocke votre entrepôt Hive.
Envoyer un job par lot Managed Service pour Apache Spark
Vous pouvez envoyer une charge de travail par lot PySpark à Managed Service pour Apache Spark qui utilise le catalogue du runtime Lakehouse.
Cet extrait de code PySpark initialise une session Spark configurée pour se connecter au catalogue du runtime Lakehouse. Il définit des propriétés essentielles telles que la fabrique de clients Lakehouse, l'ID de projet Google Cloud , le catalogue par défaut et le répertoire de l'entrepôt. Après avoir établi la session, le code montre comment lister les bases de données existantes, en créer une et définir une table au format Parquet dans cette base de données à l'aide des commandes Spark SQL.
Créez un fichier Python avec un job PySpark :
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()Remplacez les éléments suivants :
PROJECT_ID: ID de votre projet Google Cloud .LAKEHOUSE_CATALOG_ID: nom du catalogue Hive.GCS_WAREHOUSE_PATH: chemin d'accès Cloud Storage qui stocke votre entrepôt Hive.
Envoyez le job par lot :
gcloud dataproc batches submit pyspark PYTHON_SCRIPT_FILE \ --version=2.2 \ --project=PROJECT_ID \ --region=REGION \ --deps-bucket=gs://CLOUD_STORAGE_BUCKETRemplacez les éléments suivants :
PYTHON_SCRIPT_FILE: chemin d'accès au fichier d'application PySpark. Il peut s'agir d'un chemin d'accès local ou du chemin d'accès à l'objet Cloud Storage.PROJECT_ID: ID de votre projetREGION: région dans laquelle exécuter le job par lot.CLOUD_STORAGE_BUCKET: nom du bucket Cloud Storage utilisé pour préparer les dépendances d'une charge de travail.
Interroger la table depuis BigQuery
Une fois que vous avez créé des ressources à partir de Spark dans le catalogue d'environnements d'exécution Lakehouse, vous pouvez les interroger à partir de BigQuery Studio.
Dans la console Google Cloud , accédez à BigQuery.
Dans l'éditeur de requête, saisissez l'instruction suivante :
SELECT * FROM `PROJECT_ID.LAKEHOUSE_CATALOG_ID.DATABASE_NAME.TABLE_NAME`;Remplacez les éléments suivants :
PROJECT_ID: ID de votre projet.LAKEHOUSE_CATALOG_ID: nom de votre catalogue Hive.DATABASE_NAME: nom de votre base de données.TABLE_NAME: nom de votre table.