En este documento, se explica cómo configurar Apache Spark y Apache Hive para usar el catálogo del entorno de ejecución de Lakehouse. Aprenderás a crear un catálogo de Apache Hive, configurar tus sesiones de Spark para conectarte al metastore y ejecutar cargas de trabajo para crear tablas que puedas consultar directamente en BigQuery.
Antes de comenzar
- Lee Acerca de los catálogos de Hive en el catálogo de entorno de ejecución de Lakehouse para comprender cómo se conecta Spark al catálogo de entorno de ejecución de Lakehouse.
- Revisa los formatos de almacenamiento y tipos de datos admitidos.
- Revisa las limitaciones y consideraciones.
- Accede a tu cuenta de Google Cloud . 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 for Apache Iceberg, Dataproc API APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Verify that billing is enabled for your Google Cloud project.
Enable the Lakehouse for Apache Iceberg, Dataproc API APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
Roles obligatorios
Para obtener los permisos que necesitas para usar el catálogo del entorno de ejecución de Lakehouse, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto:
-
Crea 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 del entorno de ejecución de Lakehouse:
Editor de BigLake (
roles/biglake.editor) -
Acceso de solo lectura a todos los recursos del catálogo del 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 a través de 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 Spark y Hive, sigue este flujo de trabajo general:
- Crea un catálogo de Hive de Lakehouse para Apache Iceberg.
- Configura tu sesión de Spark con tu herramienta preferida (como Managed Service para Apache Spark o BigQuery Studio).
- Realiza operaciones de bases de datos y tablas dentro de tu sesión de Spark.
- Envía cargas de trabajo por lotes a Managed Service para Apache Spark y consulta las tablas resultantes directamente desde BigQuery.
Crea un catálogo de Hive de Lakehouse
Para usar el catálogo de entorno de ejecución de Lakehouse con Spark y Hive, primero debes crear 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 el metastore de Lakehouse. El catálogo tiene un nombre y una ubicación de Cloud Storage en la que residen los datos de Hive.
Console
En la consola de Google Cloud , 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 que deseas usar con tu catálogo. Como alternativa, haz clic en Explorar para elegir un bucket existente o crear uno nuevo.
En ID del catálogo, asigna un nombre a 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: Es el nombre del catálogo de Hive.GCS_WAREHOUSE_PATH: Es la ruta de acceso de Cloud Storage que almacena tu almacén de Hive.PROJECT_ID: Es el ID del proyecto de Google Cloud.REGION: Es la región principal del metastore. En el caso de los buckets de una sola región, debe coincidir con la región del bucket. En el caso de los buckets birregionales o multirregionales, debe ser una de las regiones constituyentes y donde se prevé la réplica principal del metastore. La otra región se convierte en la réplica secundaria.DESCRIPTION: Es una descripción del catálogo.
curl
- Para crear un catálogo de Hive, ejecuta el siguiente comando:
curl -X POST -s -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-d '{"locationUri": "gs://GCS_WAREHOUSE_PATH", "description": "DESCRIPTION"}' \
-H "Content-Type:application/json" \ "https://biglake.googleapis.com/hive/v1/projects/PROJECT_ID/catalogs?hiveCatalogId=LAKEHOUSE_CATALOG_ID&primary_location=REGION"
Reemplaza lo siguiente:
LAKEHOUSE_CATALOG_ID: Es el nombre del catálogo de Hive.GCS_WAREHOUSE_PATH: Es la ruta de acceso de Cloud Storage que almacena tu almacén de Hive.PROJECT_ID: Es el ID del proyecto de Google Cloud .REGION: Es la región principal del metastore. En el caso de los buckets de una sola región, debe coincidir con la región del bucket. En el caso de los buckets de doble región o multirregionales, debe ser una de las regiones constituyentes y donde se prevé la réplica principal del metastore. La otra región se convierte en la réplica secundaria.DESCRIPTION: Es una descripción del catálogo.
Configura y usa Spark y Hive
Para usar el catálogo del entorno de ejecución de Lakehouse, debes configurar tu sesión de Spark con propiedades específicas. Puedes establecer estas propiedades cuando creas un clúster de Managed Service para Apache Spark o especificarlas cada vez que creas una sesión.
Estas propiedades incluyen detalles como la fábrica de clientes, Google Cloudel ID del proyecto, el catálogo predeterminado y el directorio del almacén. Después de establecer la sesión, puedes realizar operaciones fundamentales, como enumerar las bases de datos existentes, crear bases de datos nuevas, definir tablas e insertar datos.
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.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 del entorno de ejecución de Lakehouse.
Ejecuta los siguientes comandos para crear recursos y realizar consultas sobre ellos:
-- Show all the databases in the current project. SHOW DATABASES; -- Create a database. CREATE DATABASE spark_blms_database; -- Create a Parquet datasource table. CREATE TABLE spark_blms_database.parquet_quick_start (id INT, name STRING) USING PARQUET; -- Insert data into the table. INSERT INTO TABLE spark_blms_database.parquet_quick_start VALUES (1, 'my-first-user');Reemplaza lo siguiente:
PROJECT_ID: Es el ID del proyecto de Google Cloud .LAKEHOUSE_CATALOG_ID: Es el nombre del catálogo de Hive.GCS_WAREHOUSE_PATH: Es la ruta de Cloud Storage que almacena tu almacén de Hive.
Notebook de Jupyter
- Completa las instrucciones para ejecutar 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.
En un notebook nuevo, crea una sesión de Spark y, luego, ejecuta las siguientes 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 tutorial")\ .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_blms_db") # Create a Parquet datasource table. spark.sql("CREATE TABLE jupyter_blms_db.parquet_table(id INT, name STRING) USING PARQUET") # Insert data into the table. spark.sql("INSERT INTO TABLE jupyter_blms_db.parquet_table VALUES (1, 'my-first-user');") # Query from table. spark.sql("SELECT * FROM jupyter_blms_db.parquet_table;").show()Reemplaza lo siguiente:
PROJECT_ID: Es el ID del proyecto de Google Cloud .GCS_WAREHOUSE_PATH: Es la ruta de Cloud Storage que almacena tu almacén de Hive.LAKEHOUSE_CATALOG_ID: Es el nombre del catálogo de Hive.
Notebook de BigQuery
En la consola de Google Cloud , ve a BigQuery.
En el panel Explorador, haz clic en + AGREGAR y, luego, en Notebook de Python.
En una celda de código, configura las propiedades del catálogo del entorno de ejecución de Lakehouse y de la sesión de Managed Service para Apache Spark:
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.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:
# Create a database spark.sql("CREATE DATABASE bq_spark_blms_database;") # Create a parquet datasource table spark.sql("CREATE TABLE bq_spark_blms_database.parquet_quick_start (id INT, name STRING) USING PARQUET;") # Insert data into the table spark.sql("INSERT INTO TABLE bq_spark_blms_database.parquet_quick_start VALUES (1, 'my-first-user');") # Query from table spark.sql("select * from bq_spark_blms_database.parquet_quick_start;").show()Reemplaza lo siguiente:
PROJECT_ID: Es el ID del proyecto de Google Cloud .GCS_WAREHOUSE_PATH: Es la ruta de Cloud Storage que almacena tu almacén de Hive.LAKEHOUSE_CATALOG_ID: Es el nombre del catálogo de Hive.
CLI de Hive
Para usar la CLI de Hive, debes configurarla para que se conecte al metastore. Puedes hacerlo de dos maneras:
- Opción 1: Configuración permanente. Actualiza el archivo
/etc/hive/conf/hive-site.xmlen tu nodo principal. - Opción 2: Configuración temporal. Proporciona marcas de configuración cuando inicies la CLI.
Para configurar la CLI y ejecutar tu sesión de consultas, sigue estos pasos:
- Usa SSH para conectarte al nodo principal de tu clúster de Managed Service para Apache Spark.
Según tu método de configuración, realiza una de las siguientes acciones:
Para configurar de forma permanente (opción 1):
Abre
/etc/hive/conf/hive-site.xmlen el nodo principal y agrega las siguientes propiedades:<property> <name>hive.metastore.blms.project.id</name> <value>PROJECT_ID</value> <description></description> </property> <property> <name>hive.metastore.client.factory.class</name> <value>com.google.cloud.bigquery.metastore.client.BigLakeMetastoreClientFactory</value> <description></description> </property> <property> <name>hive.metastore.blms.catalog.default</name> <value>LAKEHOUSE_CATALOG_ID</value> <description></description> </property> <property> <name>hive.metastore.warehouse.dir</name> <value>gs://GCS_WAREHOUSE_PATH</value> <description></description> </property>Inicia la CLI de Hive:
hive
Para configurar temporalmente en el inicio (opción 2): Inicia la CLI de Hive con marcas de configuración:
hive \ --hiveconf hive.metastore.blms.project.id="PROJECT_ID" \ --hiveconf hive.metastore.blms.catalog.default="LAKEHOUSE_CATALOG_ID" \ --hiveconf hive.metastore.client.factory.class=com.google.cloud.bigquery.metastore.client.BigLakeMetastoreClientFactory \ --hiveconf hive.metastore.warehouse.dir="gs://GCS_WAREHOUSE_PATH"
Luego, ejecuta los siguientes comandos en la sesión de la CLI de Hive:
show databases; create database hive_query_test; create table hive_query_test.parquet_table (id INT, name STRING) stored as PARQUET; select * from hive_query_test.parquet_table;Reemplaza lo siguiente:
PROJECT_ID: Es el ID del proyecto de Google Cloud .LAKEHOUSE_CATALOG_ID: Es el nombre del catálogo de Hive.GCS_WAREHOUSE_PATH: Es la ruta de Cloud Storage que almacena tu almacén 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 que use el catálogo de entornos de ejecución de Lakehouse.
Este fragmento de PySpark inicializa una sesión de Spark configurada para conectarse con el catálogo del entorno de ejecución de Lakehouse. Establece propiedades esenciales,como la fábrica de clientes de Lakehouse, el ID del proyecto Google Cloud , el catálogo predeterminado y el directorio del almacén. Después de establecer la sesión, el código muestra cómo enumerar las bases de datos existentes, crear una nueva y definir una tabla con formato Parquet dentro de esa base de datos con comandos de Spark SQL.
Crea un archivo de Python con un trabajo de PySpark:
from pyspark.sql import SparkSession spark = ( SparkSession.builder.appName("Lakehouse runtime catalog tutorial") .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_test") # Create a Parquet datasource table. spark.sql( "CREATE TABLE dp_serverless_test.parquet_table(id INT, name STRING) USING" " PARQUET" ) # Query from table. spark.sql("SELECT * from dp_serverless_test.parquet_table").show()Reemplaza lo siguiente:
PROJECT_ID: Es el ID del proyecto de Google Cloud .LAKEHOUSE_CATALOG_ID: Es el nombre del catálogo de Hive.GCS_WAREHOUSE_PATH: Es la ruta de acceso de Cloud Storage que almacena tu almacén de Hive.
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: Es la ruta de acceso al archivo de la aplicación de PySpark. Puede ser una ruta local o la ruta del objeto de Cloud Storage.PROJECT_ID: ID del proyectoREGION: Es la región en la que se ejecutará el trabajo por lotes.CLOUD_STORAGE_BUCKET: Es el nombre del bucket de Cloud Storage que se usa para organizar las dependencias de cualquier carga de trabajo.
Consulta la tabla desde BigQuery
Después de crear recursos desde Spark en el catálogo del entorno de ejecución de Lakehouse, puedes consultarlos desde BigQuery Studio.
En la consola de Google Cloud , 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 proyectoLAKEHOUSE_CATALOG_ID: Es el nombre de tu catálogo de Hive.DATABASE_NAME: El nombre de tu base de datos.TABLE_NAME: Es el nombre de tu tabla.