Processando dados do Hive para o BigQuery com PySpark e Dataproc Serverless
Introdução
Objetivo
Ensiná-lo a executar um workload batch para processar dados de uma tabela Apache Hive para uma tabela do BigQuery, utilizando PySpark, Dataproc Serverless na Google Cloud, e Dataproc Templates.
Dois casos de uso são cobertos com essa solução:
- Migração de tabelas e dados do Hive do seu ambiente Hadoop para o Google Cloud.
- Processamento de dados em um ambiente que inclui Apache Hive e BigQuery simultaneamente.
Dataproc Serverless
Como anunciado no final de 2021, o Dataproc Serverless nos oferece a possibilidade de executar workloads Spark na Google Cloud, sem termos que nos preocupar com gerenciamento e tuning de clusters.
Dataproc Templates
Dataproc Templates nos permite executar templates pré-desenvolvidos, de casos de uso comuns de workloads Spark, e customizá-los para necessidades específicas. Para isso, utilizando Dataproc Serverless como ambiente de execução desses workloads. Os templates são disponibilizados em Java e Python.
Nesse post, falaremos sobre como utilizar o template de PySpark: Hive to BigQuery.
Esse outro post também é uma ótima referência para iniciar o uso de Dataproc Templates a partir de outro caso de uso PySpark: GCS to BigQuery
Hive to BigQuery
O template Hive to BigQuery, quando executado, irá ler dados de sua tabela Apache Hive, e escrevê-los em uma tabela do BigQuery.
Pré-requisitos
- O Google Cloud SDK instalado e autenticado. Você pode utilizar a Cloud Shell na Google Cloud Console para já ter um ambiente configurado, a partir desse link.
- Python 3.7+ instalado e no PATH.
- Uma VPC subnet com Private Google Access habilitado. A subnet default pode ser suficiente, contanto que o Private Google Access esteja habilitado. Você pode revisar os requisitos de rede do Dataproc Serverless nesse link.
# Example updating default network to enable Private Google Access
gcloud compute networks subnets update default — region=us-central1 — enable-private-ip-google-access
Utilização
Você pode ver a documentação dos possíveis parâmetros na submissão de um job PySpark no Dataproc Serverless.
Você verá que estaremos passando o Spark BigQuery connector como uma dependência .jar na submissão do job, para permitir que o Spark se conecte com o BigQuery.
Todos os snippets de código aqui seguem a seguinte licença:
Copyright 2022 Google LLC.
SPDX-License-Identifier: Apache-2.0
Passos
1. É necessário criarmos um staging bucket no GCS para submeter um job PySpark no Dataproc Serverless, para que ele armazene as dependências do nosso workload. Usaremos o comando gsutil mb para criar um bucket:
export GCS_STAGING_LOCATION="gcs-staging-bucket-folder"
gsutil mb gs://$GCS_STAGING_LOCATION
2. Clone o repositório do Dataproc Templates, e entre na pasta python:
git clone https://github.com/GoogleCloudPlatform/dataproc-templates.git
cd dataproc-templates/python
3. Execute o template Hive to BigQuery:
a. Exporte as variáveis necessárias para a submissão do job:
export GCP_PROJECT=<project_id> # seu projeto Google Cloud
export REGION=<region> # sua região ex: us-central1
export JARS="gs://spark-lib/bigquery/spark-bigquery-latest_2.12.jar" # dependências .jar
export SUBNET=<subnet> # opcional se estiver usando a default
# export GCS_STAGING_LOCATION=<gcs-staging-bucket-folder> # já feito no passo 1
b. Execute o shell script do Dataproc Templates, que irá ler as variáveis acima, criar um Python package, e submeter o job no Dataproc Serverless.
Obs: garanta que o executável “python” esteja no seu PATH
./bin/start.sh \
- properties=spark.hadoop.hive.metastore.uris=thrift://<hostname-or-ip>:9083 \
- - template=HIVETOBIGQUERY \
- hive.bigquery.input.database="<database>" \
- hive.bigquery.input.table="<table>" \
- hive.bigquery.output.dataset="<dataset>" \
- hive.bigquery.output.table="<table>" \
- hive.bigquery.output.mode="<append|overwrite|ignore|errorifexists>" \
- hive.bigquery.temp.bucket.name="<temp-bq-bucket-name>"
Você deve ter notado que alguns parâmetros precisam ser preenchidos na submissão do template. Esses parâmetros estão descritos na documentação do template.
Pronto! O job será executado e você poderá monitorá-lo a partir da UI do Dataproc Serverless. Você aprendeu a
Observações
- Para customizar o job, você pode alterar o código PySpark do template (clonado anteriormente).
- Para rapidamente ter um ambiente com Hive para a execução do template, você pode criar um cluster Dataproc com Apache Hive, e conectar à ele.
- Assume-se que a autenticação com o Apache Hive não seja via Kerberos. Caso contrário, você deverá modificar o código com as propriedades necessárias para se autenticar com o Kerberos.
- A tabela do BigQuery (output) não precisa estar criada de antemão, mas o dataset sim.
- Você deve ter notado que precisamos de 2 buckets temporários, um para o as dependências da submissão do job no Dataproc Serverless, e outro para servir de uma localização temporária do load dos dados no BigQuery (hive.bigquery.temp.bucket.name).
- Siga a recomendação da sessão de Pré-Requisitos se você obteve o erro “Subnetwork ‘default’ does not support Private Google Access which is required for Dataproc clusters when ‘internal_ip_only’ is set to ‘true’. Enable Private Google Access on subnetwork ‘default’ or set ‘internal_ip_only’ to ‘false’”.
- O template HiveToBigQuery irá ler todas as partições da tabela especificada, mas se você deseja processar os dados de alguma partição específica, a alteração do código é simples.