Saltar para o conteúdo principal
Versão Next

Configuração do Hive Metastore

O chart tdp-hive-metastore empacota o Apache Hive Metastore 4.0.0 para Kubernetes.

O que é o Hive Metastore e por que ele existe?

O Apache Hive Metastore é o serviço de catálogo de metadados do TDP.

Ele responde a uma pergunta fundamental: quando o Spark ou o Trino querem ler uma tabela chamada vendas, como eles sabem onde os arquivos dessa tabela estão no S3?

Qual é o esquema (colunas e tipos)? Quais partições existem?

O Hive Metastore guarda exatamente essas informações: o mapeamento entre nomes de tabelas e localizações físicas no armazenamento de objetos (S3/Ozone).

Sem ele, o Spark e o Trino não conseguem descobrir tabelas pelo nome — teriam que saber o caminho exato de cada arquivo.

Para saber mais

Consulte Apache Hive — Conceitos para uma visão completa da ferramenta e seu papel no ecossistema de dados.

Como o Hive Metastore se encaixa no TDP

Spark / Trino

│ "Onde está a tabela 'vendas'?"

Hive Metastore ──► PostgreSQL (armazena metadados)

│ "Está em s3a://warehouse/vendas/"

Apache Ozone / S3 (onde os dados de fato estão)

O Hive Metastore é um serviço de infraestrutura, não uma interface para o usuário final.

Você raramente interage com ele diretamente — ele opera em segundo plano para que o Spark e o Trino funcionem corretamente com tabelas no formato Hive, Iceberg e Delta Lake.

Componentes implantados

ComponenteDescrição
Metastore ServerServiço Thrift na porta 9083 que responde a consultas de metadados
PostgreSQL (interno ou externo)Banco que armazena esquemas, tabelas, partições e localizações

Pré-requisitos

  • Kubernetes e Helm compatíveis com o chart
  • Se usar PostgreSQL externo: instância acessível a partir do cluster

Instalação (OCI)

Terminal input
helm upgrade --install <release> oci://registry.tecnisys.com.br/tdp/charts/tdp-hive-metastore \
-n <namespace> --create-namespace

Requisitos de PostgreSQL

O Hive Metastore depende de capacidade suficiente de conexões no PostgreSQL:

RequisitoMínimoRecomendadoExemplo (TDP PostgreSQL)
max_connections300400+400

Se usar PostgreSQL externo, garanta limites e rede adequados; o chart TDP PostgreSQL documenta max_connections = 400 como exemplo de postgresql.conf.

O Hive Metastore precisa de um base de dados relacional para armazenar os metadados das tabelas (esquemas, localizações, partições).

O chart suporta banco embutido ou externo — para entender quando usar cada um, consulte PostgreSQL interno versus externo na Configuração Geral.

Banco interno (PostgreSQL embutido)

tdp-hive-metastore:
postgres:
enabled: true

internal:
image: "postgres:15"
pvcSize: 1Gi
maxConnections: 500
sharedBuffers: 512MB
effectiveCacheSize: 1.2GB
maintenanceWorkMem: 128MB
workMem: 32MB
walBuffers: 16MB

database: hive
username: hive
password: "<POSTGRES_PASSWORD>"

Banco externo

Defina tdp-hive-metastore.postgres.enabled=false e configure tdp-hive-metastore.postgres.external.*.

tdp-hive-metastore:
postgres:
enabled: false
external:
host: "<POSTGRESQL_HOST>"
port: 5432

TDPConfigurations:
externalDatabase:
enabled: true
recreate: false
externalSecret:
releaseName: "<postgresql-release>"

Os jobs de hook reutilizam TDPConfigurations.externalDatabase: autenticam no PostgreSQL upstream usando o Secret associado ao nome em externalSecret.releaseName (chave postgres-password, no padrão TDP).

  • Use recreate=true apenas quando quiser recriar banco/usuário Hive de forma explícita; para upgrades que preservem dados, mantenha recreate=false (valor recomendado por omissão).

Sobrescritas via CLI (exemplo):

Terminal input
helm upgrade --install <release> oci://registry.tecnisys.com.br/tdp/charts/tdp-hive-metastore \
-n <namespace> --create-namespace \
--set TDPConfigurations.externalDatabase.recreate=false \
--set TDPConfigurations.externalDatabase.externalSecret.releaseName=<postgresql-release>

Parâmetros principais

ParâmetroDescriçãoValor por omissão / exemplo
namespaceNamespace do deployConforme o release Helm
postgres.enabledPostgreSQL internotrue
postgres.external.hostHost PostgreSQL externoExemplo DNS de serviço
metastore.typeTipo de metastore (file ou s3)file

Recursos do Metastore

Valores típicos de referência: memória 1Gi request / 2Gi limit, CPU 500m request / 1000m limit, volume persistente configurável (confirme com helm show values).

Verificar instalação

Terminal input
kubectl -n <namespace> get all

Espera-se Deployment/Service do metastore (e do PostgreSQL interno, se postgres.enabled=true), com nomes derivados de <release>.

Override do Service (hive-service-override.yaml)

Em relação ao chart upstream, o Deployment rotula pods com app: {{ .Release.Name }}-metastore, enquanto o Service upstream pode usar seletor fixo incompatível. O template do chart TDP alinha o seletor para que o Service tenha endpoints.

Verificação:

Terminal input
kubectl get endpoints -n <namespace> <release>-metastore

Se aparecer <none>, o seletor não corresponde aos labels dos pods.

Teste local:

Terminal input
kubectl port-forward -n <namespace> svc/<release>-metastore 9083:9083

Credenciais do banco Hive (opcional)

Terminal input
HIVE_PASSWORD=$(kubectl get secret --namespace <namespace> \
<release>-hive-database -o jsonpath="{.data.password}" | base64 -d)

kubectl run postgres-client --rm --tty -i --restart='Never' \
--namespace <namespace> --image postgres:14 \
--env="PGPASSWORD=$HIVE_PASSWORD" \
--command -- psql -h <postgres-service> -p 5432 -U hive -d hive

Substitua <postgres-service> pelo hostname do PostgreSQL que o metastore utiliza (interno ou externo).

Solução de problemas

  1. Esgotamento de pool de conexões: max_connections ≥ 300 no PostgreSQL.
  2. Autenticação: secrets e montagens corretas.
  3. Storage: permissões do PV.
  4. Rede: serviço PostgreSQL alcançável.

Comandos úteis (adaptando nomes de release/pod):

Terminal input
kubectl -n <namespace> exec <postgresql-pod> -- psql -c "SHOW max_connections;"
kubectl -n <namespace> exec <postgresql-pod> -- psql -c "SELECT count(*) FROM pg_stat_activity;"
kubectl -n <namespace> logs deployment/<release>-metastore