Hive Metastore¶
O Apache Hive Metastore serve como a camada de catálogo para o FlumenData, fornecendo gerenciamento de metadados para o lakehouse.
Visão Geral¶
Imagem: flumendata/hive:standalone-metastore-4.1.0 (construída customizada)
Base: apache/hive:standalone-metastore-4.1.0
Porta: 9083 (Thrift)
Saúde: Verificação de processo (pgrep -f HiveMetaStore)
Arquitetura¶
O Hive Metastore fornece:
- Namespace de 2 níveis: database.table
- Backend PostgreSQL: Metadados armazenados no PostgreSQL para durabilidade
- API Thrift: Interface padrão na porta 9083
- Integração S3A: Acesso direto ao armazenamento de objetos MinIO
Dockerfile Customizado¶
Nossa imagem customizada adiciona os drivers JDBC necessários:
FROM apache/hive:standalone-metastore-4.1.0
USER root
# Download dos drivers JDBC do PostgreSQL e bibliotecas AWS S3A
RUN curl -fsSL https://jdbc.postgresql.org/download/postgresql-42.7.1.jar \
-o /opt/hive/lib/postgresql-jdbc.jar && \
curl -fsSL https://repo1.maven.org/maven2/org/apache/hadoop/hadoop-aws/3.3.6/hadoop-aws-3.3.6.jar \
-o /opt/hive/lib/hadoop-aws.jar && \
curl -fsSL https://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk-bundle/1.12.367/aws-java-sdk-bundle-1.12.367.jar \
-o /opt/hive/lib/aws-java-sdk-bundle.jar
USER hive
Configuração¶
A configuração é gerada de templates/hive/hive-site.xml.tpl:
<configuration>
<!-- Backend PostgreSQL -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:postgresql://postgres:5432/flumendata</value>
</property>
<!-- Integração MinIO S3A -->
<property>
<name>fs.s3a.endpoint</name>
<value>http://minio:9000</value>
</property>
<!-- Localização do Warehouse -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>s3a://lakehouse/warehouse</value>
</property>
</configuration>
Comandos Python CLI¶
# Configuração
python3 flumen config --service hive # Gerar hive-site.xml
# Gerenciamento de serviço
python3 flumen up --tier 1 # Iniciar Hive Metastore
python3 flumen logs --service hive-metastore # Ver logs do Hive
# Saúde e verificação
python3 flumen health --service hive-metastore # Verificar se o Hive está saudável
python3 flumen verify-hive # Verificar configuração do Hive e mostrar databases
python3 flumen test --service hive-metastore # Testar conectividade do metastore
Schema do Banco de Dados¶
O schema do metastore é automaticamente inicializado no PostgreSQL na primeira inicialização:
# Ver tabelas do Hive Metastore no PostgreSQL
docker exec flumen_postgres psql -U flumen -d flumendata -c "\dt"
# Verificar versão do Hive
docker exec flumen_postgres psql -U flumen -d flumendata -c 'SELECT * FROM "VERSION"'
Saída esperada:
VER_ID | SCHEMA_VERSION | VERSION_COMMENT
-------+----------------+----------------------------
1 | 4.1.0 | Hive release version 4.1.0
Criando Databases¶
Crie databases usando Spark SQL:
# Shell interativo Spark SQL
python3 flumen shell-spark-sql
# Criar database
spark-sql> CREATE DATABASE my_database
LOCATION 's3a://lakehouse/warehouse/my_database.db';
# Listar databases
spark-sql> SHOW DATABASES;
Verificação¶
Execute o comando de verificação para ver todos os databases:
Isso exibe: - Lista de todos os databases no metastore - Backend do banco de metadados (PostgreSQL) - Backend de armazenamento (URI S3A) - URI Thrift do Metastore
Solução de Problemas¶
Metastore não inicia¶
Verificar logs para driver JDBC ausente:
Não pode conectar ao PostgreSQL¶
Verificar que o PostgreSQL está saudável e a conectividade de rede:
Tabelas não visíveis no Spark¶
Garantir que a configuração do Spark inclui hive-site.xml:
Localização de Armazenamento¶
Todos os dados de tabelas são armazenados no MinIO sob:
s3a://lakehouse/warehouse/
├── database1.db/
│ ├── table1/
│ └── table2/
└── database2.db/
└── table3/
Compatibilidade¶
O Hive Metastore é compatível com: - Apache Spark 2.x, 3.x, 4.x - Presto / Trino - Apache Impala - AWS Athena (com sincronização do Glue Data Catalog) - Qualquer ferramenta que suporte protocolo Thrift do Hive Metastore