Processando dados do Hive para o BigQuery com PySpark e Dataproc Serverless

Nilo
google-cloud-brasil
4 min readAug 15, 2022

Introdução

Google Cloud Dataproc logo
Google Cloud Dataproc logo

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.

Seja também um contribuidor do projeto open-source Dataproc Templates!

--

--