Configuração do Hive Metastore
O que é o Hive Metastore?
O chart tdp-hive-metastore instala o Apache Hive Metastore 4.0.0 no Kubernetes e entrega um serviço interno de catálogo, acessado por endpoint Thrift na porta 9083.
Esse catálogo guarda metadados de bancos, tabelas, colunas, tipos, partições e localizações. Os dados das tabelas continuam no warehouse configurado; o Metastore registra como esses dados devem ser encontrados e interpretados pelos clientes.
Na prática, quando um cliente compatível quer ler uma tabela chamada vendas, por exemplo, ele consulta o Metastore para obter o esquema da tabela, as partições disponíveis e o caminho dos arquivos. Hive, Spark, Trino e Iceberg são exemplos de clientes que podem consumir esse catálogo.
No TDP, o chart suporta warehouse em modo file para cenários simples ou validações, e em modo s3 para integra ção com armazenamento de objetos S3-compatível, como o Ozone. Os metadados do catálogo ficam em PostgreSQL, interno ou externo.
Consulte Apache Hive — Conceitos, seção Hive Metastore para entender o papel do catálogo de metadados no ecossistema de dados.
Como o Hive Metastore se encaixa no TDP
Clientes compatíveis
(Hive, Spark, Trino, Iceberg...)
|
| "Onde está a tabela 'vendas'?"
v
Hive Metastore --> PostgreSQL (armazena metadados)
|
| "Está no warehouse configurado"
v
Warehouse file ou S3/Ozone (onde os dados de fato estão)
O Hive Metastore opera como serviço de infraestrutura do plano de dados. Em vez de expor uma interface web para usuários finais, ele atende clientes internos que precisam consultar ou atualizar metadados de tabelas.
Por isso, a configuração normalmente se concentra no Service interno, no PostgreSQL de metadados e no modo de warehouse. O consumo acontece pelo endpoint Thrift do Service na porta 9083.
Componentes implantados
| Componente | Descrição |
|---|---|
| Metastore Server | Serviç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 |
| Jobs auxiliares TDP | Jobs de validação/criação de banco e limpeza de recursos auxiliares |
Estrutura de valores (Helm)
O chart tdp-hive-metastore distribui a configuração em dois blocos:
tdp-hive-metastore:— configuração principal: imagem, PostgreSQL (embutido por padrão ou externo), tipo de warehouse (fileous3), recursos, segurança.TDP-Settings:— configuração opcional usada apenas quandopostgres.enabled: false; habilita os hooks TDP de validação, provisionamento e autenticação no PostgreSQL externo.
TDP-Settings:
externalDatabase:
enabled: false
tdp-hive-metastore:
postgres:
enabled: true
metastore:
type: file
Visão geral
| Propriedade | Valor |
|---|---|
| Chart | tdp-hive-metastore |
| Versão do Hive Metastore | 4.0.0 |
| Versão do chart | 3.0.1 |
| Registry (OCI) | oci://registry.tecnisys.com.br/tdp/charts/tdp-hive-metastore |
| Porta Thrift | 9083 |
| Exposição HTTP externa | Não se aplica (acesso via ClusterIP, sem Ingress) |
Páginas relacionadas
- Integração — Hive Metastore: URI Thrift e exemplos de consumo por clientes compatíveis.
- Segurança — Hive Metastore: Secrets, credenciais do banco e cuidados com senhas.
Pré-requisitos
- Kubernetes 1.32+, Red Hat OpenShift 4.19+ ou Rancher Manager 2.10.x+
- Helm 3.2.0+
- Registry OCI da Tecnisys acessível pelo ambiente de instalação
- Se usar PostgreSQL externo: instância acessível a partir do cluster,
max_connections≥ 300, e Secret administrativo no padrão esperado pelo chart
- Instalação
- Parâmetros principais
- Detalhes de configuração
- Solução de problemas
- Desinstalação
Instalação
helm upgrade --install <RELEASE_NAME> \
oci://registry.tecnisys.com.br/tdp/charts/tdp-hive-metastore \
--version <CHART_VERSION> \
-n <NAMESPACE> --create-namespace
| Placeholder | Descrição |
|---|---|
<RELEASE_NAME> | Nome do release Helm |
<NAMESPACE> | Namespace Kubernetes de instalação |
<CHART_VERSION> | Versão do chart |
Verificar instalação
kubectl -n <NAMESPACE> get all
Espera-se Deployment/Service do metastore (e do PostgreSQL interno, se postgres.enabled: true), com nomes derivados de <RELEASE_NAME>.
Validação do Service do Metastore
O chart publica o Metastore por um Service interno na porta 9083. Após a instalação, valide se o Service possui endpoints antes de configurar clientes consumidores.
kubectl get endpoints -n <NAMESPACE> <RELEASE_NAME>-metastore
Se aparecer <none>, aguarde a conclusão do deploy e verifique os pods do Metastore. A página Integração — Hive Metastore mostra como usar esse endpoint nos consumidores.
Teste local:
kubectl port-forward -n <NAMESPACE> svc/<RELEASE_NAME>-metastore 9083:9083
Parâmetros principais
| Parâmetro | Descrição | Valor por omissão / exemplo |
|---|---|---|
tdp-hive-metastore.postgres.enabled | PostgreSQL interno | true |
tdp-hive-metastore.postgres.internal.pvcSize | Tamanho do PVC do PostgreSQL interno (não definido em values.yaml — exemplo recomendado) | 1Gi |
tdp-hive-metastore.postgres.internal.maxConnections | max_connections do PostgreSQL interno (não definido em values.yaml — exemplo recomendado) | 500 |
tdp-hive-metastore.postgres.external.host | Host PostgreSQL externo | "" |
tdp-hive-metastore.postgres.external.port | Porta PostgreSQL externo | 5432 |
tdp-hive-metastore.postgres.database | Nome do banco de dados | hive |
tdp-hive-metastore.postgres.username | Usuário do banco | hive |
tdp-hive-metastore.postgres.password | Senha do banco (usar Secret em produção) | <POSTGRES_PASSWORD> |
tdp-hive-metastore.metastore.type | Tipo de metastore (file ou s3) | file |
tdp-hive-metastore.metastore.image | Imagem do Metastore | registry.tecnisys.com.br/tdp-dev/images/hive-metastore:4.0.0-0 |
tdp-hive-metastore.metastore.file.warehouseDir | Diretório de warehouse no modo file | /opt/hive/warehouse |
tdp-hive-metastore.metastore.s3.warehouseDir | Caminho S3 do warehouse | s3a://warehouse/hive |
tdp-hive-metastore.metastore.s3.endpoint | Endpoint S3 | "" |
tdp-hive-metastore.metastore.s3.bucket | Bucket do warehouse | warehouse |
TDP-Settings.externalDatabase.enabled | Habilitar hooks de banco externo | false |
TDP-Settings.externalDatabase.recreate | Recriar banco/usuário no deploy | false |
TDP-Settings.externalDatabase.externalSecret.releaseName | Release do PostgreSQL (Secret com postgres-password) | tdp-postgresql-project |
Banco de dados (PostgreSQL)
O Hive Metastore armazena os metadados do catálogo em PostgreSQL. A escolha entre PostgreSQL embutido e externo é uma das primeiras decisões de configuração.
Para entender quando usar cada um, consulte PostgreSQL interno versus externo na página de Configuração Geral.
| Requisito | Mínimo | Recomendado | Exemplo (TDP PostgreSQL) |
|---|---|---|---|
| max_connections | 300 | 400+ | 400 |
| Operações concorrentes | 50+ | 100+ | Suportado pelo padrão TDP |
PostgreSQL embutido (padrão)
Com postgres.enabled: true, o chart provisiona um PostgreSQL dedicado ao metastore. O PVC associado armazena somente metadados relacionais (nomes de tabelas, partições, URIs no objeto), enquanto os dados analíticos permanecem no Ozone/S3. Dimensione disco e backup desse PVC conforme o crescimento do catálogo (quantidade de tabelas e partições), não o volume dos arquivos de dados no bucket.
O bloco postgres.internal.* não vem definido em values.yaml — defina explicitamente os valores desejados, conforme o exemplo abaixo:
tdp-hive-metastore:
postgres:
enabled: true
internal:
image: "registry.tecnisys.com.br/community/images/postgres:15"
pvcSize: 1Gi
maxConnections: 500
sharedBuffers: 512MB
effectiveCacheSize: 1.2GB
maintenanceWorkMem: 128MB
workMem: 32MB
walBuffers: 16MB
database: hive
username: hive
password: "<PASSWORD>"
PostgreSQL externo
Com PostgreSQL externo, a disponibilidade e o dimensionamento do metastore passam a depender da instância compartilhada. O armazenamento de objetos onde ficam os arquivos das tabelas não migra com a troca do host do Postgres — alterar só o banco muda onde ficam os registros que apontam para o warehouse, não o conteúdo do bucket.
Defina tdp-hive-metastore.postgres.enabled: false, configure tdp-hive-metastore.postgres.external.* e habilite TDP-Settings.externalDatabase.enabled: true para que os hooks TDP validem/provisionem o banco externo.
TDP-Settings:
externalDatabase:
enabled: true
recreate: false
externalSecret:
releaseName: "<POSTGRESQL_RELEASE>"
tdp-hive-metastore:
postgres:
enabled: false
external:
host: "<POSTGRESQL_SERVICE>"
port: 5432
Os jobs de hook reutilizam TDP-Settings.externalDatabase: autenticam no PostgreSQL externo usando o Secret associado ao nome em externalSecret.releaseName (chave postgres-password, no padrão TDP).
- Use
recreate: trueapenas quando quiser recriar banco/usuário Hive de forma explícita; para upgrades que preservem dados, mantenharecreate: false(valor padrão). - Para detalhes de Secret e credenciais, consulte Segurança — Hive Metastore.
Sobrescritas via CLI:
helm upgrade --install <RELEASE_NAME> \
oci://registry.tecnisys.com.br/tdp/charts/tdp-hive-metastore \
-n <NAMESPACE> --create-namespace \
--set TDP-Settings.externalDatabase.recreate=false \
--set TDP-Settings.externalDatabase.externalSecret.releaseName=<POSTGRESQL_RELEASE>
Modo de armazenamento do warehouse
O parâmetro tdp-hive-metastore.metastore.type define como o Metastore referencia a área de warehouse:
| Modo | Quando usar | Configuração principal |
|---|---|---|
file | Ambientes simples ou validação inicial | tdp-hive-metastore.metastore.file.warehouseDir |
s3 | Integração com armazenamento S3-compatível, como Ozone | tdp-hive-metastore.metastore.s3.* |
Exemplo resumido para warehouse S3:
tdp-hive-metastore:
metastore:
type: s3
s3:
warehouseDir: s3a://warehouse/hive
bucket: warehouse
endpoint: "http://<SERVICE_NAME>.<NAMESPACE>.svc.cluster.local:9000"
accessKey: "<S3_ACCESS_KEY>"
secretKey: "<S3_SECRET_KEY>"
pathStyleAccess: true
region: us-east-1
Os detalhes de consumo por Spark, Trino, Iceberg e outros componentes ficam na página Integração — Hive Metastore.
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 oci://registry.tecnisys.com.br/tdp/charts/tdp-hive-metastore.
Solução de problemas
- Esgotamento de pool de conexões:
max_connections≥ 300 no PostgreSQL. - Autenticação: Secrets e montagens corretas.
- Storage: permissões do PV.
- Rede: serviço PostgreSQL alcançável.
- Endpoint Thrift: Service do Metastore com endpoints na porta
9083.
Comandos úteis (adaptando nomes de release/pod):
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_NAME>-metastore
Para validar credenciais diretamente no banco Hive, use os comandos da página Segurança — Hive Metastore.
Desinstalação
helm uninstall <RELEASE_NAME> -n <NAMESPACE>
Este comando remove os recursos do release (Deployments, Services, ConfigMaps, Jobs). Os PVCs do PostgreSQL interno são mantidos por padrão para preservar os metadados do catálogo.
Para remover os PVCs do PostgreSQL interno (operação destrutiva e irreversível):
kubectl delete pvc -n <NAMESPACE> -l app.kubernetes.io/name=postgresql
A remoção dos PVCs elimina permanentemente todos os metadados do catálogo Hive (mapeamento de tabelas, esquemas, partições). Os dados nos buckets S3/Ozone não são afetados, mas os clientes perderão acesso às tabelas pelos seus nomes até que o catálogo seja recriado.