En este documento, se explica cómo configurar Apache Spark con el catálogo de entorno de ejecución de Lakehouse para usar tablas de Delta Lake. Aprenderás a crear un catálogo de Apache Hive, configurar sesiones de Spark para conectarte al metastore y ejecutar cargas de trabajo para crear y registrar tablas delta para consultar en BigQuery.
Antes de comenzar
- Lee Acerca del extremo del catálogo de Hive.
- Revisa Formatos de almacenamiento y tipos de datos admitidos.
- Revisa Limitaciones y consideraciones.
- Accede a tu Google Cloud cuenta de. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Lakehouse, Managed Service for Apache Spark APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Verify that billing is enabled for your Google Cloud project.
Enable the Lakehouse, Managed Service for Apache Spark APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.
Roles obligatorios
Para obtener los permisos que necesitas para usar el catálogo de entorno de ejecución de Lakehouse con tablas delta, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto:
-
Crear un clúster de Managed Service para Apache Spark:
Editor de Dataproc (
roles/dataproc.editor) -
Cuenta de servicio del clúster:
- Trabajador de Dataproc (
roles/dataproc.worker) - Usuario de objetos de almacenamiento (
roles/storage.objectUser) - Editor de BigLake (
roles/biglake.editor) - Consumidor de Service Usage (
roles/serviceusage.serviceUsageConsumer)
- Trabajador de Dataproc (
-
Acceso de escritura a todos los recursos del catálogo de entorno de ejecución de Lakehouse:
Editor de BigLake (
roles/biglake.editor) -
Acceso de solo lectura a todos los recursos del catálogo de entorno de ejecución de Lakehouse:
Visualizador de BigLake (
roles/biglake.viewer)
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.
Para obtener instrucciones, consulta Cómo otorgar un solo rol.
Flujo de trabajo general
Para usar el catálogo de entorno de ejecución de Lakehouse con tablas delta, sigue este flujo de trabajo:
- Crea un catálogo de Hive de Lakehouse.
- Configura tu sesión de Spark con el cliente de metastore de Lakehouse y las dependencias de Delta Lake.
- Crea y propaga tablas delta en Cloud Storage con Spark, que las registra en el metastore.
- Consulta las tablas delta desde Apache Spark (lectura y escritura) o directamente desde BigQuery (solo lectura).
Crea un catálogo de Hive de Lakehouse
Para usar el catálogo de entorno de ejecución de Lakehouse con Spark y tablas delta, crea un catálogo de Hive.
Un catálogo de Hive de Lakehouse es una colección de bases de datos de Hive. Antes de ejecutar trabajos de Spark, crea un catálogo para registrarlo en Lakehouse Metastore. El catálogo requiere un nombre y una ubicación de Cloud Storage para los datos.
Console
En la Google Cloud consola de, abre la página Lakehouse.
Haz clic en Crear catálogo.
Selecciona Catálogo de entorno de ejecución de Lakehouse.
En Tipo de catálogo, selecciona Hive Metastore.
En el campo Selecciona un bucket de Cloud Storage, ingresa el nombre del bucket de Cloud Storage para tu catálogo. Como alternativa, haz clic en Explorar para elegir o crear un bucket.
En ID del catálogo, ingresa un nombre para tu catálogo de Hive de Lakehouse.
En Ubicación principal, especifica la misma región que tu bucket.
Haz clic en Crear.
gcloud
Para crear un catálogo de Hive, ejecuta el siguiente comando:
gcloud biglake hive catalogs create LAKEHOUSE_CATALOG_ID \
--project=PROJECT_ID \
--location-uri="gs://GCS_WAREHOUSE_PATH" \
--primary-location=REGION \
--description="DESCRIPTION"
Reemplaza lo siguiente:
LAKEHOUSE_CATALOG_ID: el nombre del catálogo de Hive.GCS_WAREHOUSE_PATH: la ruta de acceso de Cloud Storage a los datos de tu almacén.PROJECT_ID: el ID de tu Google Cloud proyecto.REGION: la región principal del metastore. Para los buckets de una sola región, esto coincide con la región del bucket. Para los buckets de región doble o multirregionales, especifica una región constituyente para la réplica principal. La otra región se convierte en la réplica secundaria.DESCRIPTION: una descripción del catálogo.
Configura Spark para usar tablas delta
Para usar el catálogo de entorno de ejecución de Lakehouse con tablas delta, configura tu sesión de Spark con la fábrica de clientes de metastore de Lakehouse y las extensiones de Delta Lake.
spark-sql
- Usa SSH para conectarte al nodo principal de tu clúster de Managed Service para Apache Spark.
Ejecuta
spark-sqlen la línea de comandos con las siguientes propiedades para iniciar una sesión interactiva de Spark SQL:spark-sql \ --conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension \ --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog \ --conf spark.hive.metastore.client.factory.class=com.google.cloud.bigquery.metastore.client.BigLakeMetastoreClientFactory \ --conf spark.hive.metastore.blms.project.id=PROJECT_ID \ --conf spark.hive.metastore.blms.catalog.default=LAKEHOUSE_CATALOG_ID \ --conf spark.hive.metastore.warehouse.dir=gs://GCS_WAREHOUSE_PATHDespués de que se inicia la sesión, Spark se conecta al catálogo de entorno de ejecución de Lakehouse.
Ejecuta los siguientes comandos para crear y consultar recursos delta:
-- Show all the databases in the current project. SHOW DATABASES; -- Create a database. CREATE DATABASE spark_delta_blms_database; -- Create a Delta data source table. CREATE TABLE spark_delta_blms_database.delta_quick_start (id INT, name STRING) USING DELTA; -- Insert data into the table. INSERT INTO TABLE spark_delta_blms_database.delta_quick_start VALUES (1, 'my-first-user'); -- Query the Delta table. SELECT * FROM spark_delta_blms_database.delta_quick_start;Reemplaza lo siguiente:
PROJECT_ID: el ID de tu Google Cloud proyecto.LAKEHOUSE_CATALOG_ID: el nombre del catálogo de Hive.GCS_WAREHOUSE_PATH: la ruta de acceso de Cloud Storage que almacena los datos de tu almacén.
Notebook de Jupyter
- Ejecuta un notebook de Jupyter en un clúster de Managed Service para Apache Spark.
- Accede a la interfaz web de Jupyter desde la pestaña Interfaces web de la página de detalles del clúster en la Google Cloud consola de.
En un notebook nuevo, crea una sesión de Spark configurada para Delta Lake y ejecuta consultas:
from pyspark.sql import SparkSession # If a Spark session exists, stop it first by running spark.stop() spark = SparkSession.builder\ .master("local")\ .appName("Lakehouse runtime catalog Delta tutorial")\ .config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension")\ .config("spark.sql.catalog.spark_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog")\ .config("spark.hive.metastore.client.factory.class", "com.google.cloud.bigquery.metastore.client.BigLakeMetastoreClientFactory")\ .config("spark.hive.metastore.blms.project.id", "PROJECT_ID")\ .config("spark.hive.metastore.warehouse.dir", "gs://GCS_WAREHOUSE_PATH")\ .config("spark.hive.metastore.blms.catalog.default", "LAKEHOUSE_CATALOG_ID")\ .getOrCreate() # Show all the databases. df = spark.sql("SHOW DATABASES;") df.show() # Create a database. spark.sql("CREATE DATABASE jupyter_delta_blms_db") # Create a Delta data source table. spark.sql("CREATE TABLE jupyter_delta_blms_db.delta_table(id INT, name STRING) USING DELTA") # Insert data into the table. spark.sql("INSERT INTO TABLE jupyter_delta_blms_db.delta_table VALUES (1, 'my-first-user');") # Query from table. spark.sql("SELECT * FROM jupyter_delta_blms_db.delta_table;").show()Reemplaza lo siguiente:
PROJECT_ID: el ID de tu Google Cloud proyecto.GCS_WAREHOUSE_PATH: la ruta de acceso de Cloud Storage que almacena los datos de tu almacén.LAKEHOUSE_CATALOG_ID: el nombre del catálogo de Hive.
Notebook de BigQuery
En la Google Cloud consola de, ve a BigQuery.
En el panel Explorador, haz clic en + AGREGAR y, luego, en Notebook de Python.
En una celda de código, configura la sesión de Managed Service para Apache Spark con extensiones delta y propiedades del catálogo de entorno de ejecución de Lakehouse:
from google.cloud.dataproc_spark_connect import DataprocSparkSession from google.cloud.dataproc_v1 import Session import os os.environ['DATAPROC_SPARK_CONNECT_DEFAULT_DATASOURCE'] = "" session = Session() session.environment_config.execution_config.ttl = {"seconds": 864000} session.runtime_config.version = "2.3" session.runtime_config.properties = { "spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension", "spark.sql.catalog.spark_catalog": "org.apache.spark.sql.delta.catalog.DeltaCatalog", "spark.hive.metastore.blms.project.id": "PROJECT_ID", "spark.hive.metastore.blms.catalog.default": "LAKEHOUSE_CATALOG_ID", "spark.hive.metastore.warehouse.dir": "gs://GCS_WAREHOUSE_PATH", "spark.hive.metastore.client.factory.class": "com.google.cloud.bigquery.metastore.client.BigLakeMetastoreClientFactory", "spark.sql.catalogImplementation": "hive" } spark = DataprocSparkSession.builder.dataprocSessionConfig(session).getOrCreate() print("Spark session created successfully")En otra celda de código, crea una base de datos y una tabla delta:
# Create a database spark.sql("CREATE DATABASE bq_spark_delta_database;") # Create a Delta data source table spark.sql("CREATE TABLE bq_spark_delta_database.delta_quick_start (id INT, name STRING) USING DELTA;") # Insert data into the table spark.sql("INSERT INTO TABLE bq_spark_delta_database.delta_quick_start VALUES (1, 'my-first-user');") # Query from table spark.sql("SELECT * FROM bq_spark_delta_database.delta_quick_start;").show()Reemplaza lo siguiente:
PROJECT_ID: el ID de tu Google Cloud proyecto.GCS_WAREHOUSE_PATH: la ruta de acceso de Cloud Storage que almacena los datos de tu almacén.LAKEHOUSE_CATALOG_ID: el nombre del catálogo de Hive.
Envía un trabajo por lotes de Managed Service para Apache Spark
Puedes enviar una carga de trabajo por lotes de PySpark a Managed Service para Apache Spark para crear y consultar tablas delta con el catálogo de entorno de ejecución de Lakehouse.
Crea un archivo de Python con un trabajo de PySpark:
from pyspark.sql import SparkSession spark = ( SparkSession.builder.appName("Lakehouse runtime catalog Delta tutorial") .config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension") .config("spark.sql.catalog.spark_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog") .config( "spark.hive.metastore.client.factory.class", "com.google.cloud.bigquery.metastore.client.BigLakeMetastoreClientFactory", ) .config("spark.hive.metastore.blms.project.id", "PROJECT_ID") .config("spark.hive.metastore.blms.catalog.default", "LAKEHOUSE_CATALOG_ID") .config( "spark.hive.metastore.warehouse.dir", "gs://GCS_WAREHOUSE_PATH", ) .enableHiveSupport() .getOrCreate() ) # Show all the databases. spark.sql("SHOW DATABASES;").show() # Create a database. spark.sql("CREATE DATABASE dp_serverless_delta_db") # Create a Delta data source table. spark.sql( "CREATE TABLE dp_serverless_delta_db.delta_table(id INT, name STRING) USING DELTA" ) # Insert data into the table. spark.sql("INSERT INTO TABLE dp_serverless_delta_db.delta_table VALUES (1, 'my-first-user');") # Query from table. spark.sql("SELECT * FROM dp_serverless_delta_db.delta_table;").show()Reemplaza lo siguiente:
PROJECT_ID: el ID de tu Google Cloud proyecto.LAKEHOUSE_CATALOG_ID: el nombre del catálogo de Hive.GCS_WAREHOUSE_PATH: la ruta de acceso de Cloud Storage que almacena los datos de tu almacén.
Envía el trabajo por lotes:
gcloud dataproc batches submit pyspark PYTHON_SCRIPT_FILE \ --version=2.2 \ --project=PROJECT_ID \ --region=REGION \ --deps-bucket=gs://CLOUD_STORAGE_BUCKETReemplaza lo siguiente:
PYTHON_SCRIPT_FILE: la ruta de acceso local o de Cloud Storage al archivo de aplicación de PySpark.PROJECT_ID: el ID de tu proyecto.REGION: la región en la que se ejecutará el trabajo por lotes.CLOUD_STORAGE_BUCKET: el bucket de Cloud Storage para almacenar en etapa intermedia las dependencias de la carga de trabajo.
Consulta tablas delta desde BigQuery
Después de crear tablas delta desde Spark en el catálogo de entorno de ejecución de Lakehouse, puedes consultarlas desde BigQuery Studio.
Las consultas ejecutadas desde BigQuery en tablas delta en el extremo del catálogo de Hive son de solo lectura.
En la Google Cloud consola de, ve a BigQuery.
En el editor de consultas, escribe la siguiente oración:
SELECT * FROM `PROJECT_ID.LAKEHOUSE_CATALOG_ID.DATABASE_NAME.TABLE_NAME`;Reemplaza lo siguiente:
PROJECT_ID: el ID de tu proyecto.LAKEHOUSE_CATALOG_ID: el nombre de tu catálogo de Hive.DATABASE_NAME: el nombre de tu base de datos.TABLE_NAME: el nombre de tu tabla delta.
Limitaciones
Cuando se usan tablas delta con el extremo del catálogo de Hive del catálogo de entorno de ejecución de Lakehouse, se aplican las siguientes limitaciones:
- Consultas de solo lectura en BigQuery: Las consultas en tablas delta desde BigQuery son de solo lectura. Realiza modificaciones de datos, operaciones DML y cambios de esquema con Apache Spark.
- Esquema de marcador de posición en
GetHiveTabley verdadera inspección de esquema:GetHiveTablellamadas para tablas delta muestran un esquema de marcador de posición en lugar de el esquema de tabla real. Para inspeccionar el esquema real de una tabla delta, usa Apache Spark. BigQuery calcula un esquema modificado adaptado para la ejecución de consultas de Dremel, que no es una coincidencia 1:1 con el esquema real de la tabla delta. - Incompatibilidad del cliente de Hive: Los clientes de Hive (como la CLI de Hive) no admiten tablas delta con el extremo de Hive del catálogo de entorno de ejecución de Lakehouse. Usa Apache Spark para administrar tablas delta y Spark o BigQuery para consultarlas.
- Operaciones administradas por el catálogo no compatibles: El modo administrado por el catálogo no es compatible con las tablas delta. No puedes crear una tabla delta con DDL de metastore independiente. En su lugar, crea tablas delta con ubicaciones de almacenamiento externas en Cloud Storage (por ejemplo, con Apache Spark) y regístralas en el catálogo.
- Limitaciones de la tabla delta externa de BigQuery: El
extremo de Hive del catálogo de entorno de ejecución de Lakehouse usa la misma
implementación del motor de consultas subyacente que las tablas delta externas de BigQuery. Se aplican todas las
limitaciones de la tabla delta externa
y las limitaciones de la tabla de BigLake. Por ejemplo, no se admiten las operaciones de captura de datos modificados (CDC) ni la API de lectura de BigQuery Storage, y no se admite
timestamp_ntz.
¿Qué sigue?
- Acerca del extremo del catálogo de Hive.
- Formatos de almacenamiento y tipos de datos admitidos
- Limitaciones y consideraciones para los catálogos de Hive.