Utiliser le métastore BigQuery avec Dataproc
.Ce document explique comment utiliser le métastore BigQuery avec Dataproc sur Compute Engine. Cette connexion vous fournit un métastore unique et partagé qui fonctionne avec les moteurs logiciels Open Source, tels qu'Apache Spark.
Avant de commencer
- Activer la facturation pour votre projet Google Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.
Activez les API BigQuery et Dataproc.
Facultatif: Découvrez le fonctionnement du métastore BigQuery et pourquoi vous devriez l'utiliser.
Rôles requis
Pour obtenir les autorisations dont vous avez besoin pour utiliser Spark et Dataproc avec le métastore BigQuery en tant que magasin de métadonnées, demandez à votre administrateur de vous accorder les rôles IAM suivants:
-
Créez un cluster Dataproc :
Nœud de calcul Dataproc (
roles/dataproc.worker
) sur le compte de service par défaut Compute Engine du projet. -
Créez des tables BigQuery Metastore dans Spark :
-
Nœud de calcul Dataproc (
roles/dataproc.worker
) sur le compte de service de VM Dataproc du projet -
Éditeur de données BigQuery (
roles/bigquery.dataEditor
) sur le compte de service de VM Dataproc du projet -
Administrateur des objets de l'espace de stockage (
roles/storage.objectAdmin
) sur le compte de service de la VM Dataproc du projet
-
Nœud de calcul Dataproc (
-
Interroger des tables Metastore BigQuery dans BigQuery :
-
Lecteur de données BigQuery (
roles/bigquery.dataViewer
) sur le projet -
Utilisateur BigQuery (
roles/bigquery.user
) sur le projet -
Lecteur des objets Storage (
roles/storage.objectViewer
) sur le projet
-
Lecteur de données BigQuery (
Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.
Workflow général
Pour utiliser Dataproc sur Compute Engine avec le métastore BigQuery, procédez comme suit:
- Créez un cluster Dataproc ou configurez un cluster existant.
- Connectez-vous au moteur logiciel Open Source de votre choix, tel que Spark.
- Utilisez un fichier JAR pour installer le plug-in de catalogue Apache Iceberg sur le cluster.
- Créez et gérez vos ressources de métastore BigQuery selon vos besoins, en fonction du moteur logiciel Open Source que vous utilisez.
- Dans BigQuery, accédez à vos ressources Metastore BigQuery et utilisez-les.
Connecter le métastore BigQuery à Spark
Les instructions suivantes vous expliquent comment connecter Dataproc au métastore BigQuery à l'aide de Spark SQL interactif.
Télécharger le plug-in de catalogue Iceberg
Pour connecter le métastore BigQuery à Dataproc et Spark, vous devez utiliser le fichier JAR du plug-in de catalogue Iceberg du métastore BigQuery.
Ce fichier est inclus par défaut dans la version d'image Dataproc 2.2. Si vos clusters Dataproc n'ont pas d'accès direct à Internet, vous devez télécharger le plug-in et l'importer dans un bucket Cloud Storage auquel votre cluster Dataproc peut accéder.
Téléchargez le plug-in de catalogue Apache Iceberg pour le métastore BigQuery.
Configurer un cluster Dataproc
Avant de vous connecter à BigQuery Metastore, vous devez configurer un cluster Dataproc.
Pour ce faire, vous pouvez créer un cluster ou utiliser un cluster existant. Vous utiliserez ensuite ce cluster pour exécuter Spark SQL interactif et gérer vos ressources de métastore BigQuery.
L'accès privé à Google (PGA) doit être activé sur le sous-réseau de la région dans laquelle le cluster est créé. Par défaut, les VM de cluster Dataproc créées avec une version d'image 2.2 (par défaut) ou ultérieure ne comportent que des adresses IP internes. Pour permettre aux VM du cluster de communiquer avec les API Google, activez l'accès privé à Google sur le sous-réseau réseau
default
(ou le nom de réseau spécifié par l'utilisateur, le cas échéant) dans la région où le cluster est créé.Si vous souhaitez exécuter l'exemple d'interface Web Zeppelin de ce guide, vous devez utiliser ou créer un cluster Dataproc avec le composant facultatif Zeppelin activé.
Nouveau cluster
Pour créer un cluster Dataproc, exécutez la commande gcloud
dataproc clusters create
suivante. Cette configuration contient les paramètres dont vous avez besoin pour utiliser le métastore BigQuery.
gcloud dataproc clusters create CLUSTER_NAME \ --project=PROJECT_ID \ --region=LOCATION \ --optional-components=ZEPPELIN \ --enable-component-gateway \ --single-node
Remplacez les éléments suivants :
CLUSTER_NAME
: nom de votre cluster Dataproc.PROJECT_ID
: ID du projet Google Cloud dans lequel vous créez le cluster.LOCATION
: région dans laquelle vous créez le cluster. Google Cloud
Cluster existant
Pour configurer un cluster existant, ajoutez l'environnement d'exécution Spark Iceberg suivant à votre cluster.
org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.5.2
Vous pouvez ajouter l'environnement d'exécution à l'aide de l'une des options suivantes:
Script d'initialisation Ajoutez la dépendance d'exécution à un script d'initialisation personnalisé qui s'exécute lors de la création.
Après avoir ajouté la dépendance d'exécution au script, suivez les instructions pour créer, recréer et mettre à jour un cluster.
Installation manuelle. Ajoutez manuellement le fichier JAR du plug-in de catalogue Iceberg et configurez les propriétés Spark pour inclure l'environnement d'exécution sur votre cluster.
Envoyer une tâche Spark
Pour envoyer une tâche Spark, utilisez l'une des méthodes suivantes:
CLI gcloud
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"
Remplacez les éléments suivants :
PROJECT_ID
: ID du projet Google Cloud contenant le cluster Dataproc.CLUSTER_NAME
: nom du cluster Dataproc que vous utilisez pour exécuter la tâche Spark SQL.REGION
: région Compute Engine dans laquelle se trouve votre cluster.LOCATION
: emplacement des ressources BigQuery.CATALOG_NAME
: nom du catalogue Spark que vous utilisez avec votre tâche SQL.WAREHOUSE_DIRECTORY
: dossier Cloud Storage contenant votre entrepôt de données. Cette valeur commence pargs://
.SPARK_SQL_COMMAND
: requête SQL Spark que vous souhaitez exécuter. Cette requête inclut les commandes permettant de créer vos ressources. Par exemple, pour créer un espace de noms et une table.
Étincelle interactive
Se connecter à Spark et installer le plug-in de catalogue
Pour installer le plug-in de catalogue pour le métastore BigQuery, connectez-vous à votre cluster Dataproc à l'aide de SSH.
- Dans Google Cloud Console, accédez à la page Instances de VM.
Pour vous connecter à une instance de VM Dataproc, cliquez sur SSH dans la liste des instances de machine virtuelle. Le résultat ressemble à ce qui suit :
Connected, host fingerprint: ssh-rsa ... Linux cluster-1-m 3.16.0-0.bpo.4-amd64 ... ... example-cluster@cluster-1-m:~$
Dans le terminal, exécutez la commande d'initialisation du métastore BigQuery suivante:
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
Remplacez les éléments suivants :
CATALOG_NAME
: nom du catalogue Spark que vous utilisez avec votre tâche SQL.PROJECT_ID
: ID de projet Google Cloud du catalogue de métadonnées BigQuery auquel votre catalogue Spark est associé.LOCATION
: emplacement du métastore BigQuery. Google CloudWAREHOUSE_DIRECTORY
: dossier Cloud Storage contenant votre entrepôt de données. Cette valeur commence pargs://
.
Une fois que vous êtes connecté à un cluster, le terminal Spark affiche l'invite
spark-sql
.spark-sql (default)>
Gérer les ressources de métastore BigQuery
Vous êtes maintenant connecté au métastore BigQuery. Vous pouvez afficher vos ressources existantes ou en créer en fonction de vos métadonnées stockées dans le métastore BigQuery.
Par exemple, essayez d'exécuter les commandes suivantes dans la session interactive Spark SQL pour créer un espace de noms et une table Iceberg.
Utilisez le catalogue Iceberg personnalisé:
USE `CATALOG_NAME`;
Créez un espace de noms :
CREATE NAMESPACE IF NOT EXISTS NAMESPACE_NAME;
Utilisez l'espace de noms créé:
USE NAMESPACE_NAME;
Créez une table Iceberg:
CREATE TABLE TABLE_NAME (id int, data string) USING ICEBERG;
Insérez une ligne de tableau:
INSERT INTO TABLE_NAME VALUES (1, "first row");
Ajoutez une colonne de tableau:
ALTER TABLE TABLE_NAME ADD COLUMNS (newDoubleCol double);
Afficher les métadonnées de table:
DESCRIBE EXTENDED TABLE_NAME;
Répertoriez les tables de l'espace de noms:
SHOW TABLES;
Notebook Zeppelin
Dans la console Google Cloud, accédez à la page Clusters Dataproc.
Cliquez sur le nom du cluster que vous souhaitez utiliser.
La page Détails du cluster s'ouvre.
Dans le menu de navigation, cliquez sur Interfaces Web.
Sous Passerelle des composants, cliquez sur Zeppelin. La page du notebook Zeppelin s'ouvre.
Dans le menu de navigation, cliquez sur Notebook (Carnet), puis sur + Créer une note.
Dans la boîte de dialogue, saisissez un nom de notebook. Laissez Spark sélectionné comme interpréteur par défaut.
Cliquez sur Créer. Un nouveau notebook est créé.
Dans le notebook, cliquez sur le menu des paramètres, puis sur Interpréteur.
Dans le champ Search interpreters (Rechercher des interprètes), recherchez Spark.
Cliquez sur Modifier.
Dans le champ Spark.jars, saisissez l'URI du fichier JAR Spark.
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
Cliquez sur Enregistrer.
Cliquez sur OK.
Copiez le code PySpark suivant dans votre notebook Zeppelin.
%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()
Remplacez les éléments suivants :
CATALOG_NAME
: nom du catalogue Spark à utiliser pour la tâche SQL.PROJECT_ID
: ID du projet Google Cloud contenant le cluster Dataproc.WAREHOUSE_DIRECTORY
: dossier Cloud Storage contenant votre entrepôt de données. Cette valeur commence pargs://
.NAMESPACE_NAME
: nom de l'espace de noms qui fait référence à votre table Spark.WAREHOUSE_DIRECTORY
: URI du dossier Cloud Storage dans lequel votre entrepôt de données est stocké.TABLE_NAME
: nom de la table pour votre table Spark.
Cliquez sur l'icône d'exécution ou appuyez sur
Shift-Enter
pour exécuter le code. Une fois la tâche terminée, le message d'état indique "Spark Job Finished" (Tâche Spark terminée), et le résultat affiche le contenu de la table:
Étape suivante
- Configurez les fonctionnalités facultatives de BigQuery Metastore.
- Afficher et interroger des tables à partir de Spark dans la console BigQuery