Utiliser le metastore BigLake avec Dataproc sans serveur
Ce document explique comment utiliser BigLake Metastore avec Dataproc sans serveur.
Avant de commencer
- Activez 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 de BigLake Metastore et pourquoi vous devriez l'utiliser.
Rôles requis
Pour obtenir les autorisations nécessaires pour utiliser Spark et Dataproc sans serveur avec BigLake Metastore comme magasin de métadonnées, demandez à votre administrateur de vous accorder les rôles IAM suivants :
-
Créez des tables BigLake Metastore dans Spark :
-
Nœud de calcul Dataproc (
roles/dataproc.worker
) sur le compte de service Dataproc sans serveur dans le projet -
Éditeur de données BigQuery (
roles/bigquery.dataEditor
) sur le compte de service Dataproc sans serveur dans le projet -
Administrateur des objets de l'espace de stockage (
roles/storage.objectAdmin
) sur le compte de service Dataproc sans serveur dans le projet
-
Nœud de calcul Dataproc (
-
Interrogez les tables du metastore BigLake 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 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.
Workflow général
Pour utiliser BigQuery avec Dataproc sans serveur, suivez ces étapes générales :
- Créez un fichier contenant les commandes que vous souhaitez exécuter dans BigLake Metastore.
- Connectez-vous au moteur de logiciel Open Source de votre choix.
- Envoyez un job par lot à l'aide de la méthode de votre choix, comme SparkSQL ou PySpark.
Connecter BigLake Metastore à Spark
Les instructions suivantes vous montrent comment connecter Dataproc sans serveur au metastore BigLake :
SparkSQL
Pour envoyer un job SparkSQL par lot, procédez comme suit.
Créez un fichier SQL contenant les commandes Spark SQL que vous souhaitez exécuter dans le metastore BigLake. Par exemple, cette commande crée un espace de noms et une table.
CREATE NAMESPACE `CATALOG_NAME`.NAMESPACE_NAME; CREATE TABLE `CATALOG_NAME`.NAMESPACE_NAME.TABLE_NAME (id int, data string) USING ICEBERG LOCATION 'WAREHOUSE_DIRECTORY';
Remplacez les éléments suivants :
CATALOG_NAME
: nom du catalogue qui fait référence à votre table Spark.NAMESPACE_NAME
: nom de l'espace de noms qui fait référence à votre table Spark.TABLE_NAME
: nom de table pour votre table Spark.WAREHOUSE_DIRECTORY
: URI du dossier Cloud Storage dans lequel votre entrepôt de données est stocké.
Envoyez un job par lot SparkSQL en exécutant la commande
gcloud dataproc batches submit spark-sql
gcloud CLI suivante :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"
Remplacez les éléments suivants :
SQL_SCRIPT_PATH
: chemin d'accès au fichier SQL utilisé par le job par lot.PROJECT_ID
: ID du Google Cloud projet dans lequel exécuter le job par lot.REGION
: région dans laquelle votre charge de travail est exécutée.SUBNET_NAME
: facultatif. Nom d'un sous-réseau VPC dansREGION
pour lequel l'accès privé à Google est activé et qui répond aux autres exigences concernant le sous-réseau de session.LOCATION
: emplacement dans lequel exécuter le job par lot.BUCKET_PATH
: emplacement du bucket Cloud Storage pour importer les dépendances de charge de travail. Le fichierWAREHOUSE_FOLDER
se trouve dans ce bucket. Le préfixe d'URIgs://
du bucket n'est pas obligatoire. Vous pouvez spécifier le chemin d'accès ou le nom du bucket, par exemplemybucketname1
.
Pour en savoir plus sur l'envoi de jobs Spark par lot, consultez Exécuter une charge de travail Spark par lot.
PySpark
Pour envoyer un job par lot PySpark, procédez comme suit.
Créez un fichier Python avec les commandes PySpark que vous souhaitez exécuter dans BigLake Metastore.
Par exemple, la commande suivante configure un environnement Spark pour interagir avec les tables Iceberg stockées dans le metastore BigLake. La commande crée ensuite un espace de noms et une table Iceberg dans cet espace de noms.
from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("BigLake 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';")
Remplacez les éléments suivants :
PROJECT_ID
: ID du Google Cloud projet dans lequel exécuter le job par lot.LOCATION
: emplacement des ressources BigQuery.CATALOG_NAME
: nom du catalogue qui fait référence à votre table Spark.TABLE_NAME
: nom de table pour votre table Spark.WAREHOUSE_DIRECTORY
: URI du dossier Cloud Storage dans lequel votre entrepôt de données est stocké.NAMESPACE_NAME
: nom de l'espace de noms qui fait référence à votre table Spark.
Envoyez le job par lot à l'aide de la commande
gcloud dataproc batches submit pyspark
.gcloud dataproc batches submit pyspark PYTHON_SCRIPT_PATH \ --version=2.2 \ --project=PROJECT_ID \ --region=REGION \ --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"
Remplacez les éléments suivants :
PYTHON_SCRIPT_PATH
: chemin d'accès au script Python utilisé par le job par lot.PROJECT_ID
: ID du Google Cloud projet dans lequel exécuter le job par lot.REGION
: région dans laquelle votre charge de travail est exécutée.BUCKET_PATH
: emplacement du bucket Cloud Storage pour importer les dépendances de charge de travail. Le préfixe d'URIgs://
du bucket n'est pas obligatoire. Vous pouvez spécifier le chemin d'accès ou le nom du bucket, par exemplemybucketname1
.
Pour en savoir plus sur l'envoi de jobs par lot PySpark, consultez la documentation de référence de gcloud pour PySpark.
Étapes suivantes
- Configurez les fonctionnalités BigLake Metastore facultatives.
- Afficher et interroger des tables depuis Spark dans la console BigQuery