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, acedido através de endpoint Thrift na porta 9083.
Esse catálogo guarda metadados de bases de dados, tabelas, colunas, tipos, partições e localizações. Os dados das tabelas continuam no warehouse configurado; o Metastore regista 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, consulta o Metastore para obter o esquema da tabela, as partições disponíveis e o caminho dos ficheiros. 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 objectos S3-compatível, como o Ozone. Os metadados do catálogo ficam em PostgreSQL, interno ou externo.
Consulte Apache Hive — Conceitos, secção Hive Metastore para compreender o papel do catálogo de metadados no ecossistema de dados.
Como o Hive Metastore se integra 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 residem efectivamente)
O Hive Metastore opera como serviço de infraestrutura do plano de dados. Em vez de expor uma interface web para usuários finais, atende clientes internos que precisam de consultar ou actualizar metadados de tabelas.
Por isso, a configuração normalmente concentra-se no Service interno, no PostgreSQL de metadados e no modo de warehouse. O consumo acontece pelo endpoint Thrift do Service na porta 9083.
Componentes implementados
| Componente | Descrição |
|---|---|
| Metastore Server | Serviço Thrift na porta 9083 que responde a consultas de metadados |
| PostgreSQL (interno ou externo) | Base de dados que armazena esquemas, tabelas, partições e localizações |
| Jobs auxiliares TDP | Jobs de validação/criação de base de dados 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 omissão ou externo), tipo de warehouse (fileous3), recursos, segurança.TDP-Settings:— configuração opcional utilizada apenas quandopostgres.enabled: false; activa os hooks TDP de validação, aprovisionamento 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 aplicável (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 da base de dados e cuidados com palavras-passe.
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 formato esperado pelo chart
- Instalação
- Parâmetros principais
- Detalhes de configuração
- Resoluçã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 utilizar 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 da base de dados | hive |
tdp-hive-metastore.postgres.username | Usuário da base de dados | hive |
tdp-hive-metastore.postgres.password | Palavra-passe da base de dados (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 | Directó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 base de dados externa | false |
TDP-Settings.externalDatabase.recreate | Recriar base de dados/usuário no deploy | false |
TDP-Settings.externalDatabase.externalSecret.releaseName | Release do PostgreSQL (Secret com postgres-password) | tdp-postgresql-project |
Base 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 saber quando usar cada opção, 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 (predefinição)
Com postgres.enabled: true, o chart aprovisiona um PostgreSQL dedicado ao metastore. O PVC associado armazena apenas metadados relacionais (nomes de tabelas, partições, URIs no armazenamento de objectos), enquanto os dados analíticos permanecem no Ozone/S3. Dimensione o disco e o backup desse PVC de acordo com o crescimento do catálogo (quantidade de tabelas e partições), não do volume de ficheiros de dados no bucket.
O bloco postgres.internal.* não vem definido em values.yaml — defina explicitamente os valores pretendidos, 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 partilhada (ou gerida) que configurar. O armazenamento de objectos onde residem os ficheiros das tabelas não migra com a alteração do host do Postgres — mudar apenas a base de dados altera onde ficam os registos 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/aprovisione a base de dados externa.
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 a base de dados/usuário Hive de forma explícita; em upgrades que preservem dados, mantenharecreate: false(valor por omissão). - Para detalhes de Secret e credenciais, consulte Segurança — Hive Metastore.
Sobreposições 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 encontram-se 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.
Resolução de problemas
- Esgotamento do pool de conexões:
max_connections≥ 300 no PostgreSQL. - Autenticação: Secrets e montagens correctas.
- Storage: permissões do PV.
- Rede: serviço PostgreSQL acessí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 directamente na base de dados Hive, utilize 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 omissã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 afectados, mas os clientes perderão acesso às tabelas pelos seus nomes até que o catálogo seja recriado.