Ce document explique comment exécuter des charges de travail par lot Dataproc sans serveur pour Spark SQL et PySpark afin de créer une table Apache Iceberg avec des métadonnées stockées dans BigQuery Metastore. Pour en savoir plus sur d'autres façons d'exécuter du code Spark, consultez Exécuter du code PySpark dans un notebook BigQuery et Exécuter une charge de travail Apache Spark.
Avant de commencer
Si ce n'est pas déjà fait, créez un projet Google Cloud et un bucket Cloud Storage.
Configurer votre projet
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Dataproc, BigQuery, and Cloud Storage APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Dataproc, BigQuery, and Cloud Storage APIs.
Créez un bucket Cloud Storage dans votre projet.
- In the Google Cloud console, go to the Cloud Storage Buckets page.
- Click Create bucket.
- On the Create a bucket page, enter your bucket information. To go to the next
step, click Continue.
- For Name your bucket, enter a name that meets the bucket naming requirements.
-
For Choose where to store your data, do the following:
- Select a Location type option.
- Select a Location option.
- For Choose a default storage class for your data, select a storage class.
- For Choose how to control access to objects, select an Access control option.
- For Advanced settings (optional), specify an encryption method, a retention policy, or bucket labels.
- Click Create.
Attribuez le rôle Éditeur de données BigQuery (
roles/bigquery.dataEditor
) au compte de service par défaut Compute Engine,PROJECT_NUMBER-compute@developer.gserviceaccount.com
. Pour savoir comment procéder, consultez la section Attribuer un rôle unique.Exemple de Google Cloud CLI:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role roles/bigquery.dataEditor
Remarques :
- PROJECT_ID et PROJECT_NUMBER sont listés dans la section Informations sur le projet du tableau de bord de la console Google Cloud.
Assurez-vous que l'accès privé à Google est activé dans le sous-réseau VPC régional où vous exécuterez votre charge de travail par lot Dataproc sans serveur. Pour en savoir plus, consultez la section Créer un tableau en iceberg.
Mappage des ressources Open Source vers les ressources BigQuery
Notez le mappage suivant entre les termes de ressource Open Source et de ressource BigQuery:
Ressource Open Source | Ressource BigQuery |
---|---|
Espace de noms, base de données | Ensemble de données |
Table partitionnée ou non | Tableau |
Afficher | Afficher |
Créer une table Iceberg
Cette section explique comment créer une table Iceberg avec des métadonnées dans BigQuery Metastore à l'aide de charges de travail par lot Dataproc Serverless Spark SQL et PySpark.
Spark SQL
Exécuter une charge de travail Spark SQL pour créer une table Iceberg
Les étapes suivantes vous montrent comment exécuter une charge de travail par lot Dataproc Serverless Spark SQL pour créer une table Iceberg avec des métadonnées de table stockées dans BigQuery Metastore.
Copiez les commandes Spark SQL suivantes en local ou dans Cloud Shell dans un fichier
iceberg-table.sql
.USE CATALOG_NAME; CREATE NAMESPACE IF NOT EXISTS example_namespace; DROP TABLE IF EXISTS example_table; CREATE TABLE example_table (id int, data string) USING ICEBERG LOCATION 'gs://BUCKET/WAREHOUSE_FOLDER'; INSERT INTO example_table VALUES (1, 'first row'); ALTER TABLE example_table ADD COLUMNS (newDoubleCol double); DESCRIBE TABLE example_table;
Remplacez les éléments suivants :
- CATALOG_NAME: nom du catalogue Iceberg.
- BUCKET et WAREHOUSE_FOLDER: bucket et dossier Cloud Storage utilisés comme répertoire d'entrepôt Iceberg.
Exécutez la commande suivante en local ou dans Cloud Shell à partir du répertoire contenant
iceberg-table.sql
pour envoyer la charge de travail Spark SQL.gcloud dataproc batches submit spark-sql iceberg-table.sql \ --project=PROJECT_ID \ --region=REGION \ --deps-bucket=BUCKET_NAME \ --version=2.2 \ --subnet=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \ --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=gs://BUCKET/WAREHOUSE_FOLDER"
Remarques :
- PROJECT_ID : ID de votre projet Google Cloud . Les ID de projet sont listés dans la section Project info (Informations sur le projet) du tableau de bord de la console Google Cloud.
- REGION: région Compute Engine disponible pour exécuter la charge de travail.
- BUCKET_NAME : nom du bucket Cloud Storage. Spark importe les dépendances de la charge de travail dans un dossier
/dependencies
de ce bucket avant d'exécuter la charge de travail par lot. Le WAREHOUSE_FOLDER se trouve dans ce bucket. - SUBNET_NAME: nom d'un sous-réseau VPC dans le
REGION
pour lequel l'accès privé à Google est activé et qui répond aux autres exigences concernant les sous-réseaux de session. - LOCATION: emplacement BigQuery compatible. L'emplacement par défaut est "États-Unis".
--version
:version d'exécution Dataproc sans serveur 2.2 ou ultérieure.--properties
Propriétés du catalogue.
Afficher les métadonnées de table dans BigQuery
Dans la console Google Cloud, accédez à la page BigQuery.
Afficher les métadonnées de table Iceberg
PySpark
Les étapes suivantes vous montrent comment exécuter une charge de travail par lot PySpark Dataproc sans serveur pour créer une table Iceberg avec des métadonnées de table stockées dans BigQuery Metastore.
- Copiez le code PySpark suivant en local ou dans Cloud Shell dans un fichier
iceberg-table.py
.catalog = "CATALOG_NAME" namespace = "NAMESPACE" spark.sql(f"USE `{catalog}`;") spark.sql(f"CREATE NAMESPACE IF NOT EXISTS `{namespace}`;") spark.sql(f"USE `{namespace}`;") # Create table and display schema spark.sql("DROP TABLE IF EXISTS example_iceberg_table") spark.sql("CREATE TABLE example_iceberg_table (id int, data string) USING ICEBERG") spark.sql("DESCRIBE example_iceberg_table;") # Insert table data. spark.sql("INSERT INTO example_iceberg_table VALUES (1, 'first row');") # Alter table, then display schema. spark.sql("ALTER TABLE example_iceberg_table ADD COLUMNS (newDoubleCol double);") spark.sql("DESCRIBE example_iceberg_table;")
Remplacez les éléments suivants :
- CATALOG_NAME et NAMESPACE: le nom et l'espace de noms du catalogue Iceberg permettent d'identifier la table Iceberg (
catalog.namespace.table_name
).
- CATALOG_NAME et NAMESPACE: le nom et l'espace de noms du catalogue Iceberg permettent d'identifier la table Iceberg (
-
Exécutez la commande suivante en local ou dans Cloud Shell à partir du répertoire contenant
iceberg-table.py
pour envoyer la charge de travail PySpark.gcloud dataproc batches submit pyspark iceberg-table.py \ --project=PROJECT_ID \ --region=REGION \ --deps-bucket=BUCKET_NAME \ --version=2.2 \ --subnet=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \ --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=gs://BUCKET/WAREHOUSE_FOLDER"
Remarques :
- PROJECT_ID : ID de votre projet Google Cloud . Les ID de projet sont listés dans la section Project info (Informations sur le projet) du tableau de bord de la console Google Cloud.
- REGION: région Compute Engine disponible pour exécuter la charge de travail.
- BUCKET_NAME : nom du bucket Cloud Storage. Spark importe les dépendances de la charge de travail dans un dossier
/dependencies
de ce bucket avant d'exécuter la charge de travail par lot. - SUBNET_NAME: nom d'un sous-réseau VPC dans le
REGION
pour lequel l'accès privé à Google est activé et qui répond aux autres exigences concernant les sous-réseaux de session. --version
:version d'exécution Dataproc sans serveur 2.2 ou ultérieure.- LOCATION: emplacement BigQuery compatible. L'emplacement par défaut est "États-Unis".
- BUCKET et WAREHOUSE_FOLDER: bucket et dossier Cloud Storage utilisés comme répertoire de l'entrepôt Iceberg.
--properties
: Propriétés du catalogue.
- Afficher le schéma de la table dans BigQuery.
- Dans la console Google Cloud, accédez à la page BigQuery. Accéder à BigQuery Studio
- Afficher les métadonnées de table Iceberg