Usa el metastore de BigLake con Dataproc Serverless
En este documento, se explica cómo usar el metastore de BigLake con Dataproc Serverless.
Antes de comenzar
- Habilita la facturación para tu proyecto de Google Cloud . Obtén información para verificar si la facturación está habilitada en un proyecto.
Habilita las APIs de BigQuery y Dataproc.
Opcional: Comprende cómo funciona BigLake Metastore y por qué deberías usarlo.
Roles obligatorios
Para obtener los permisos que necesitas para usar Spark y Dataproc Serverless con el metastore de BigLake como almacén de metadatos, pídele a tu administrador que te otorgue los siguientes roles de IAM:
-
Crea tablas de BigLake Metastore en Spark:
-
Trabajador de Dataproc (
roles/dataproc.worker
) en la cuenta de servicio de Dataproc Serverless del proyecto -
Editor de datos de BigQuery (
roles/bigquery.dataEditor
) en la cuenta de servicio de Dataproc Serverless del proyecto -
Administrador de objetos de almacenamiento (
roles/storage.objectAdmin
) en la cuenta de servicio de Dataproc Serverless del proyecto
-
Trabajador de Dataproc (
-
Consulta las tablas de BigLake Metastore en BigQuery:
-
Visualizador de datos de BigQuery (
roles/bigquery.dataViewer
) en el proyecto -
Usuario de BigQuery (
roles/bigquery.user
) en el proyecto -
Visualizador de objetos de Storage (
roles/storage.objectViewer
) en el proyecto
-
Visualizador de datos de BigQuery (
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.
Flujo de trabajo general
Para usar BigQuery con Dataproc Serverless, sigue estos pasos generales:
- Crea un archivo con los comandos que deseas ejecutar en BigLake Metastore.
- Conéctate al motor de software de código abierto que prefieras.
- Envía un trabajo por lotes con el método que prefieras, como Spark SQL o PySpark.
Conecta BigLake Metastore con Spark
En las siguientes instrucciones, se muestra cómo conectar Dataproc Serverless a BigLake Metastore:
SparkSQL
Para enviar un trabajo por lotes de Spark SQL, completa los siguientes pasos.
Crea un archivo SQL con los comandos de Spark SQL que deseas ejecutar en BigLake Metastore. Por ejemplo, este comando crea un espacio de nombres y una tabla.
CREATE NAMESPACE `CATALOG_NAME`.NAMESPACE_NAME; CREATE TABLE `CATALOG_NAME`.NAMESPACE_NAME.TABLE_NAME (id int, data string) USING ICEBERG LOCATION 'WAREHOUSE_DIRECTORY';
Reemplaza lo siguiente:
CATALOG_NAME
: Es el nombre del catálogo que hace referencia a tu tabla de Spark.NAMESPACE_NAME
: Es el nombre del espacio de nombres que hace referencia a tu tabla de Spark.TABLE_NAME
: Es el nombre de la tabla de Spark.WAREHOUSE_DIRECTORY
: Es el URI de la carpeta de Cloud Storage en la que se almacena tu data warehouse.
Ejecuta el siguiente comando de gcloud CLI
gcloud dataproc batches submit spark-sql
para enviar un trabajo por lotes de Spark SQL: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"
Reemplaza lo siguiente:
SQL_SCRIPT_PATH
: Es la ruta de acceso al archivo SQL que usa el trabajo por lotes.PROJECT_ID
: Es el ID del proyecto Google Cloud en el que se ejecutará el trabajo por lotes.REGION
: Es la región en la que se ejecuta tu carga de trabajo.SUBNET_NAME
: Opcional. Es el nombre de una subred de VPC enREGION
que tiene habilitado el Acceso privado a Google y cumple con otros requisitos de subred de sesión.LOCATION
: Es la ubicación en la que se ejecutará el trabajo por lotes.BUCKET_PATH
: Es la ubicación del bucket de Cloud Storage en el que se subirán las dependencias de la carga de trabajo.WAREHOUSE_FOLDER
se encuentra en este bucket. No se requiere el prefijo de URIgs://
del bucket. Puedes especificar la ruta de acceso o el nombre del bucket, por ejemplo,mybucketname1
.
Para obtener más información sobre cómo enviar trabajos por lotes de Spark, consulta Ejecuta una carga de trabajo por lotes de Spark.
PySpark
Para enviar un trabajo por lotes de PySpark, completa los siguientes pasos.
Crea un archivo de Python con los comandos de PySpark que deseas ejecutar en BigLake Metastore.
Por ejemplo, el siguiente comando configura un entorno de Spark para interactuar con las tablas de Iceberg almacenadas en BigLake Metastore. Luego, el comando crea un espacio de nombres nuevo y una tabla de Iceberg dentro de ese espacio de nombres.
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';")
Reemplaza lo siguiente:
PROJECT_ID
: Es el ID del proyecto Google Cloud en el que se ejecutará el trabajo por lotes.LOCATION
: La ubicación en la que se encuentran los recursos de BigQuery.CATALOG_NAME
: Es el nombre del catálogo que hace referencia a tu tabla de Spark.TABLE_NAME
: Es el nombre de la tabla de Spark.WAREHOUSE_DIRECTORY
: Es el URI de la carpeta de Cloud Storage en la que se almacena tu data warehouse.NAMESPACE_NAME
: Es el nombre del espacio de nombres que hace referencia a tu tabla de Spark.
Envía el trabajo por lotes con el siguiente comando
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"
Reemplaza lo siguiente:
PYTHON_SCRIPT_PATH
: Es la ruta de acceso a la secuencia de comandos de Python que usa el trabajo por lotes.PROJECT_ID
: Es el ID del proyecto Google Cloud en el que se ejecutará el trabajo por lotes.REGION
: Es la región en la que se ejecuta tu carga de trabajo.BUCKET_PATH
: Es la ubicación del bucket de Cloud Storage en el que se subirán las dependencias de la carga de trabajo. No se requiere el prefijo de URIgs://
del bucket. Puedes especificar la ruta de acceso o el nombre del bucket, por ejemplo,mybucketname1
.
Para obtener más información sobre el envío de trabajos por lotes de PySpark, consulta la referencia de gcloud de PySpark.
¿Qué sigue?
- Configura las funciones opcionales de BigLake Metastore.
- Visualiza y consulta tablas desde Spark en la consola de BigQuery.