Este documento explica como configurar o Apache Spark e o Apache Hive para usar o catálogo de ambientes de execução do Lakehouse. Você vai aprender a criar um catálogo do Apache Hive, configurar as sessões do Spark para se conectar ao metastore e executar cargas de trabalho para criar tabelas que podem ser consultadas diretamente no BigQuery.
Antes de começar
- Leia Sobre os catálogos do Hive no catálogo de ambientes de execução do Lakehouse para entender como o Spark se conecta ao catálogo de ambientes de execução do Lakehouse.
- Analise os Tipos de dados e formatos de armazenamento compatíveis.
- Analise as Limitações e considerações.
- Faça login na sua Google Cloud conta do. Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho dos nossos produtos em situações reais. Clientes novos também recebem US $300 em créditos para executar, testar e implantar cargas de trabalho.
-
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.
Funções exigidas
Para receber as permissões necessárias a fim de usar o catálogo de ambientes de execução do Lakehouse, peça que o administrador conceda a você os seguintes papéis do IAM no projeto:
-
Criar um cluster do Serviço Gerenciado para Apache Spark:
Editor do Dataproc (
roles/dataproc.editor) -
Conta de serviço do cluster:
- Worker do Dataproc (
roles/dataproc.worker) - Usuário de objetos do Storage (
roles/storage.objectUser) - Editor do BigLake (
roles/biglake.editor) - Consumidor do Service Usage (
roles/serviceusage.serviceUsageConsumer)
- Worker do Dataproc (
-
Acesso de gravação a todos os recursos do catálogo de ambientes de execução do Lakehouse:
Editor do BigLake (
roles/biglake.editor) -
Acesso somente leitura a todos os recursos do catálogo de ambientes de execução do Lakehouse:
Leitor do BigLake (
roles/biglake.viewer)
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias usando personalizados papéis ou outros predefinidos papéis.
Para instruções, consulte Conceder um único papel.
Fluxo de trabalho geral
Para usar o catálogo de ambientes de execução do Lakehouse com o Spark e o Hive, siga este fluxo de trabalho geral:
- Crie um catálogo do Hive do Lakehouse para Apache Iceberg.
- Configure a sessão do Spark usando a ferramenta de sua preferência, como o Serviço Gerenciado para Apache Spark ou o BigQuery Studio.
- Realize operações de banco de dados e tabela na sessão do Spark.
- Envie cargas de trabalho em lote para o Serviço Gerenciado para Apache Spark e consulte as tabelas resultantes diretamente do BigQuery.
Criar um catálogo do Hive do Lakehouse
Para usar o catálogo de ambientes de execução do Lakehouse com o Spark e o Hive, primeiro crie um catálogo do Hive.
Um catálogo do Hive do Lakehouse é uma coleção de bancos de dados do Hive. Antes de executar jobs do Spark, crie um catálogo para registrá-lo no metastore do Lakehouse. O catálogo tem um nome e um local do Cloud Storage em que os dados do Hive residem.
Console
No Google Cloud console, abra a página Lakehouse.
Clique em Criar catálogo.
Selecione Catálogo de ambientes de execução do Lakehouse.
Em Tipo de catálogo, selecione Metastore do Hive.
No campo Selecionar um bucket do Cloud Storage, insira o nome do bucket do Cloud Storage a ser usado com o catálogo. Como alternativa, clique em Procurar para escolher um bucket atual ou criar um novo.
Em ID do catálogo, dê um nome ao catálogo do Hive do Lakehouse.
Em Local principal, especifique a mesma região do bucket.
Clique em Criar.
gcloud
Para criar um catálogo do Hive, execute o seguinte comando:
gcloud biglake hive catalogs create LAKEHOUSE_CATALOG_ID \
--project=PROJECT_ID
--location-uri="gs://GCS_WAREHOUSE_PATH" \
--primary_location=REGION \
--description="DESCRIPTION"
Substitua:
LAKEHOUSE_CATALOG_ID: o nome do catálogo do Hive.GCS_WAREHOUSE_PATH: o caminho do Cloud Storage que armazena o warehouse do Hive.PROJECT_ID: o Google Cloud ID do projeto.REGION: a região principal do metastore. Para buckets de região única, ele precisa corresponder à região do bucket. Para buckets de região dupla ou multirregião, ele precisa ser uma das regiões constituintes e onde a réplica principal do metastore é pretendida. A outra região se torna a réplica secundária.DESCRIPTION: uma descrição do catálogo.
curl
- Para criar um catálogo do Hive, execute o seguinte 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"
Substitua:
LAKEHOUSE_CATALOG_ID: o nome do catálogo do Hive.GCS_WAREHOUSE_PATH: o caminho do Cloud Storage que armazena o warehouse do Hive.PROJECT_ID: o ID do Google Cloud projeto.REGION: a região principal do metastore. Para buckets de região única, ele precisa corresponder à região do bucket. Para buckets de região dupla ou multirregião, ele precisa ser uma das regiões constituintes e onde a réplica principal do metastore é pretendida. A outra região se torna a réplica secundária.DESCRIPTION: uma descrição do catálogo.
Configurar e usar o Spark e o Hive
Para usar o catálogo de ambientes de execução do Lakehouse, é necessário configurar a sessão do Spark com propriedades específicas. É possível definir essas propriedades ao criar um cluster do Serviço Gerenciado para Apache Spark ou especificá-las sempre que você criar uma sessão.
Essas propriedades incluem detalhes como a fábrica de clientes, Google Cloud o ID do projeto, o catálogo padrão e o diretório do warehouse. Depois que a sessão é estabelecida, é possível realizar operações fundamentais, como listar bancos de dados atuais, criar novos bancos de dados, definir tabelas e inserir dados.
spark-sql
- Use SSH para se conectar ao nó principal do cluster do Serviço Gerenciado para Apache Spark.
Execute
spark-sqlna linha de comando com as seguintes propriedades para iniciar uma sessão interativa do 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_PATHDepois que a sessão é iniciada, o Spark se conecta ao catálogo de ambientes de execução do Lakehouse.
Execute os seguintes comandos para criar e consultar recursos:
-- 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');Substitua:
PROJECT_ID: o Google Cloud ID do projeto.LAKEHOUSE_CATALOG_ID: o nome do catálogo do Hive.GCS_WAREHOUSE_PATH: o caminho do Cloud Storage que armazena o warehouse do Hive.
Jupyter Notebook
- Conclua as instruções para executar um notebook do Jupyter em um cluster do Serviço Gerenciado para Apache Spark.
- Acesse a interface da Web do Jupyter na guia Interfaces da Web da página de detalhes do cluster no Google Cloud console.
Em um novo notebook, crie uma sessão do Spark e execute as seguintes 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()Substitua:
PROJECT_ID: o Google Cloud ID do projeto.GCS_WAREHOUSE_PATH: o caminho do Cloud Storage que armazena o warehouse do Hive.LAKEHOUSE_CATALOG_ID: o nome do catálogo do Hive.
Notebook do BigQuery
No Google Cloud console, acesse o BigQuery.
No painel Explorer , clique em + ADICIONAR e em Notebook do Python.
Em uma célula de código, configure as propriedades da sessão do Serviço Gerenciado para Apache Spark e do catálogo de ambientes de execução do 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.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")Em outra célula de código, crie um banco de dados e uma tabela:
# 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()Substitua:
PROJECT_ID: o Google Cloud ID do projeto.GCS_WAREHOUSE_PATH: o caminho do Cloud Storage que armazena o warehouse do Hive.LAKEHOUSE_CATALOG_ID: o nome do catálogo do Hive.
CLI do Hive
Para usar a CLI do Hive, é necessário configurá-la para se conectar ao metastore. É possível fazer isso de duas maneiras:
- Opção 1: configuração permanente. Atualize o arquivo
/etc/hive/conf/hive-site.xmlno nó principal. - Opção 2: configuração temporária. Forneça flags de configuração ao iniciar a CLI.
Para configurar a CLI e executar a sessão de consulta, siga estas etapas:
- Use SSH para se conectar ao nó principal do cluster do Serviço Gerenciado para Apache Spark.
Dependendo do método de configuração, siga um destes procedimentos:
Para configurar permanentemente (opção 1) :
Abra
/etc/hive/conf/hive-site.xmlno nó principal e adicione as seguintes propriedades:<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>Inicie a CLI do Hive:
hive
Para configurar temporariamente na inicialização (opção 2) : inicie a CLI do Hive com flags de configuração:
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"
Em seguida, execute os seguintes comandos na sessão da CLI do 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;Substitua:
PROJECT_ID: o Google Cloud ID do projeto.LAKEHOUSE_CATALOG_ID: o nome do catálogo do Hive.GCS_WAREHOUSE_PATH: o caminho do Cloud Storage que armazena o warehouse do Hive.
Enviar um job em lote do Serviço Gerenciado para Apache Spark
É possível enviar uma carga de trabalho em lote do PySpark para o Serviço Gerenciado para Apache Spark que usa o catálogo de ambientes de execução do Lakehouse.
Esse snippet do PySpark inicializa uma sessão do Spark configurada para se conectar ao catálogo de ambientes de execução do Lakehouse. Ele define propriedades essenciais,como a fábrica de clientes do Lakehouse, Google Cloud ID do projeto, catálogo padrão e diretório do warehouse. Depois de estabelecer a sessão, o código demonstra como listar bancos de dados atuais, criar um novo banco de dados e definir uma tabela formatada em Parquet nesse banco de dados usando comandos do Spark SQL.
Crie um arquivo Python com um job do 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()Substitua:
PROJECT_ID: o ID do Google Cloud projeto.LAKEHOUSE_CATALOG_ID: o nome do catálogo do Hive.GCS_WAREHOUSE_PATH: o caminho do Cloud Storage que armazena o warehouse do Hive.
Envie o job em lote:
gcloud dataproc batches submit pyspark PYTHON_SCRIPT_FILE \ --version=2.2 \ --project=PROJECT_ID \ --region=REGION \ --deps-bucket=gs://CLOUD_STORAGE_BUCKETSubstitua:
PYTHON_SCRIPT_FILE: o caminho para o arquivo do aplicativo PySpark. Pode ser um caminho local ou o caminho do objeto do Cloud Storage.PROJECT_ID: o ID do projeto.REGION: a região em que o job em lote será executado.CLOUD_STORAGE_BUCKET: o nome do bucket do Cloud Storage usado para preparar as dependências de qualquer carga de trabalho.
Consultar a tabela no BigQuery
Depois de criar recursos do Spark no catálogo de ambientes de execução do Lakehouse, é possível consultá-los no BigQuery Studio.
No Google Cloud console, acesse o BigQuery.
No editor de consultas, digite a seguinte instrução:
SELECT * FROM `PROJECT_ID.LAKEHOUSE_CATALOG_ID.DATABASE_NAME.TABLE_NAME`;Substitua:
PROJECT_ID: o ID do projeto.LAKEHOUSE_CATALOG_ID: o nome do catálogo do Hive.DATABASE_NAME: o nome do banco de dados.TABLE_NAME: o nome da tabela.