Utilizzare il metastore BigQuery con Dataproc Serverless
Questo documento spiega come utilizzare BigQuery Metastore con Dataproc Serverless.
Prima di iniziare
- Attiva la fatturazione per il tuo progetto Google Cloud . Scopri come controllare se la fatturazione è attivata in un progetto.
Abilita le API BigQuery e Dataproc.
(Facoltativo) Scopri come funziona il metastore BigQuery e perché dovresti utilizzarlo.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per utilizzare Spark e Dataproc Serverless con BigQuery Metastore come repository dei metadati, chiedi all'amministratore di concederti i seguenti ruoli IAM:
-
Crea le tabelle del metastore BigQuery in Spark:
-
Dataproc Worker (
roles/dataproc.worker
) nell'account di servizio Dataproc Serverless del progetto -
Editor dati BigQuery (
roles/bigquery.dataEditor
) nell'account di servizio Dataproc Serverless del progetto -
Amministratore oggetti archiviazione (
roles/storage.objectAdmin
) nell'account di servizio Dataproc Serverless del progetto
-
Dataproc Worker (
-
Esegui query sulle tabelle del metastore BigQuery in BigQuery:
-
Visualizzatore dati BigQuery (
roles/bigquery.dataViewer
) nel progetto -
Utente BigQuery (
roles/bigquery.user
) nel progetto -
Visualizzatore oggetti Storage (
roles/storage.objectViewer
) nel progetto
-
Visualizzatore dati BigQuery (
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Flusso di lavoro generale
Per utilizzare BigQuery con Dataproc Serverless, segui questi passaggi generali:
- Crea un file con i comandi che vuoi eseguire nel metastore BigQuery.
- Connettiti al motore software open source che preferisci.
- Invia un job batch utilizzando il metodo che preferisci, ad esempio Spark SQL o PySpark.
Collegare il metastore BigQuery a Spark
Le istruzioni riportate di seguito mostrano come collegare Dataproc Serverless al metastore BigQuery:
SparkSQL
Per inviare un job batch Spark SQL, completa i seguenti passaggi:
Crea un file SQL con i comandi Spark SQL che vuoi eseguire nel metastore BigQuery. Ad esempio, questo comando crea uno spazio dei nomi e una tabella.
CREATE NAMESPACE `CATALOG_NAME`.NAMESPACE_NAME; CREATE TABLE `CATALOG_NAME`.NAMESPACE_NAME.TABLE_NAME (id int, data string) USING ICEBERG LOCATION 'WAREHOUSE_DIRECTORY';
Sostituisci quanto segue:
CATALOG_NAME
: il nome del catalogo che fa riferimento alla tabella Spark.NAMESPACE_NAME
: il nome dello spazio dei nomi che fa riferimento alla tabella Spark.TABLE_NAME
: un nome per la tabella Spark.WAREHOUSE_DIRECTORY
: l'URI della cartella Cloud Storage in cui è archiviato il data warehouse.
Invia un job batch Spark eseguendo il seguente comando
gcloud dataproc batches submit spark-sql
gcloud CLI: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"
Sostituisci quanto segue:
SQL_SCRIPT_PATH
: il percorso del file SQL utilizzato dal job batch.PROJECT_ID
: l'ID del progetto Google Cloud in cui eseguire il job batch.REGION
: la regione in cui viene eseguito il tuo carico di lavoro.SUBNET_NAME
: facoltativo. Il nome di una subnet VPC inREGION
in cui è attivo Accesso privato Google e che soddisfa altri requisiti per le subnet di sessione.LOCATION
: la posizione in cui eseguire il job batch.BUCKET_PATH
: la posizione del bucket Cloud Storage in cui caricare le dipendenze del carico di lavoro.WAREHOUSE_FOLDER
si trova in questo bucket. Il prefisso URIgs://
del bucket non è obbligatorio. Puoi specificare il percorso o il nome del bucket, ad esempiomybucketname1
.
Per ulteriori informazioni sull'invio di job batch Spark, consulta Eseguire un carico di lavoro batch Spark.
PySpark
Per inviare un job batch PySpark, completa i seguenti passaggi.
Crea un file Python con i comandi PySpark che vuoi eseguire nel metastore BigQuery.
Ad esempio, il seguente comando configura un ambiente Spark per interagire con le tabelle Iceberg archiviate nel metastore BigQuery. Il comando quindi crea un nuovo spazio dei nomi e una tabella Iceberg all'interno di questo spazio.
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("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';")
Sostituisci quanto segue:
PROJECT_ID
: l'ID del progetto Google Cloud in cui eseguire il job batch.LOCATION
: la posizione dove si trovano le risorse BigQuery.CATALOG_NAME
: il nome del catalogo che fa riferimento alla tabella Spark.TABLE_NAME
: un nome per la tabella Spark.WAREHOUSE_DIRECTORY
: l'URI della cartella Cloud Storage in cui è archiviato il data warehouse.NAMESPACE_NAME
: il nome dello spazio dei nomi che fa riferimento alla tabella Spark.
Invia il job batch utilizzando il seguente
gcloud dataproc batches submit pyspark
comando.gcloud dataproc batches submit pyspark PYTHON_SCRIPT_PATH \ --version=2.2 \ --project=PROJECT_ID \ --region=REGION \ --deps-bucket=BUCKET_PATH \ --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"
Sostituisci quanto segue:
PYTHON_SCRIPT_PATH
: il percorso dello script Python utilizzato dal job batch.PROJECT_ID
: l'ID del progetto Google Cloud in cui eseguire il job batch.REGION
: la regione in cui viene eseguito il tuo carico di lavoro.BUCKET_PATH
: la posizione del bucket Cloud Storage in cui caricare le dipendenze del carico di lavoro. Il prefisso URIgs://
del bucket non è obbligatorio. Puoi specificare il percorso o il nome del bucket, ad esempiomybucketname1
.
Per ulteriori informazioni sull'invio di job batch PySpark, consulta la documentazione di riferimento di gcloud per PySpark.
Passaggi successivi
- Configura le funzionalità facoltative del metastore BigQuery.
- Visualizza e esegui query sulle tabelle da Spark nella console BigQuery.