Configuração do Delta Lake
O que é o Delta Lake?
O Delta Lake é um formato de tabela aberta que adiciona transações ACID ao armazenamento de objetos (S3/Ozone). Em vez de gravar arquivos Parquet diretamente, o Delta Lake mantém um transaction log — um histórico de todas as operações (INSERT, UPDATE, DELETE, MERGE) realizadas na tabela.
Com o tempo, esse modelo gera dois tipos de acúmulo que precisam de limpeza periódica:
- Arquivos órfãos: arquivos Parquet que existem no S3 mas não são mais referenciados por nenhuma versão ativa da tabela
- Versões antigas: o transaction log mantém histórico indefinidamente; sem limpeza, ele cresce sem limite
O chart tdp-deltalake não é uma aplicação contínua — ele cria Kubernetes CronJobs que rodam periodicamente para realizar essa manutenção automaticamente, utilizando Apache Spark 4.0.2.
Consulte Delta Lake — Conceitos para uma visão completa do formato, transações ACID e casos de uso.
Jobs de manutenção fornecidos
| Job | Descrição |
|---|---|
| VACUUM | Remove arquivos antigos não referenciados pelo transaction log |
| OPTIMIZE | Compacta arquivos pequenos em arquivos maiores |
| OPTIMIZE Z-ORDER | Otimiza o layout dos dados para consultas com filtros específicos |
| DESCRIBE HISTORY | Registra histórico de alterações para auditoria |
Estrutura de valores (Helm)
O chart tdp-deltalake distribui a configuração em dois blocos:
maintenance:— jobs de manutenção (VACUUM, OPTIMIZE, Z-ORDER, DESCRIBE HISTORY), agendamento (cron), retenção e configuração Spark dos jobs.spark:— valores do chart upstream do Spark: imagem base, labels, configuração de master e workers.
maintenance:
enabled: true
spark:
enabled: true
image:
repository: "registry.tecnisys.com.br/tdp-dev/images/spark"
tag: "4.0.2-0"
jobs:
vacuum:
enabled: true
schedule: "0 2 * * *"
retentionHours: 168
spark:
image:
registry: registry.tecnisys.com.br
repository: tdp-dev/images/spark
tag: 4.0.2-0
Visão geral
| Propriedade | Valor |
|---|---|
| Chart | tdp-deltalake |
| Tipo | maintenance (CronJobs) |
| Versão do Delta Lake | 4.0.1 |
| Versão do chart | 3.0.1 |
| Registry (OCI) | oci://registry.tecnisys.com.br/tdp/charts/tdp-deltalake |
| Spark | 4.0.2 |
| Scala | 2.13 |
Páginas relacionadas
- Integrações — Delta Lake: S3/MinIO, Trino, Spark, Airflow.
- Segurança — Delta Lake: Secret de credenciais S3 e boas práticas.
Pré-requisitos
- Kubernetes 1.32+, Red Hat OpenShift 4.19+ ou Rancher Manager 2.10.x+
- Helm 3.2.0+
- Secret
s3-credentialscom as chavesaccess-keyesecret-keycriado no namespace antes do deploy. Consulte Segurança — Delta Lake para instruções.
- Instalação
- Parâmetros principais
- Detalhes de configuração
- Desinstalação
Instalação
helm upgrade --install <RELEASE_NAME> \
oci://registry.tecnisys.com.br/tdp/charts/tdp-deltalake \
--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 |
OpenShift
No OpenShift, o chart aplica force no Security Context por padrão:
global:
compatibility:
openshift:
adaptSecurityContext: force
Esse valor já vem pré-configurado no values.yaml. A justificativa desse padrão está na página Configuração Geral, aba Decisões de ambiente que afetam a configuração, no tópico Compatibilidade do orquestrador e ajustes de segurança.
Verificação pós-instalação
# Listar CronJobs criados
kubectl get cronjobs -n <NAMESPACE>
# Verificar últimas execuções
kubectl get jobs -n <NAMESPACE>
# Logs de um job específico
kubectl logs -n <NAMESPACE> -l job-name=<JOB_NAME>
Parâmetros principais
| Parâmetro | Descrição | Padrão |
|---|---|---|
maintenance.enabled | Habilitar jobs de manutenção | true |
maintenance.spark.enabled | Habilitar dependência Spark | true |
maintenance.spark.image.repository | Imagem Spark | registry.tecnisys.com.br/tdp-dev/images/spark |
maintenance.spark.image.tag | Tag da imagem Spark | 4.0.2-0 |
maintenance.spark.resources.requests.cpu | CPU mínima por job | 1 |
maintenance.spark.resources.requests.memory | Memória mínima por job | 2Gi |
maintenance.spark.resources.limits.cpu | CPU máxima por job | 2 |
maintenance.spark.resources.limits.memory | Memória máxima por job | 4Gi |
maintenance.jobs.vacuum.enabled | Habilitar job VACUUM | true |
maintenance.jobs.vacuum.schedule | Cron do VACUUM | 0 2 * * * |
maintenance.jobs.vacuum.retentionHours | Retenção VACUUM (horas) | 168 |
maintenance.jobs.optimize.enabled | Habilitar job OPTIMIZE | true |
maintenance.jobs.optimize.schedule | Cron do OPTIMIZE | 0 3 * * 0 |
maintenance.jobs.optimizeZOrder.enabled | Habilitar OPTIMIZE Z-ORDER | false |
maintenance.jobs.optimizeZOrder.schedule | Cron do OPTIMIZE Z-ORDER | 0 1 * * 6 |
maintenance.jobs.describeHistory.enabled | Habilitar DESCRIBE HISTORY | false |
maintenance.jobs.describeHistory.schedule | Cron do DESCRIBE HISTORY | 0 6 * * * |
maintenance.defaultTablePath | Caminho padrão das tabelas Delta no S3 | s3a://warehouse/delta |
Jobs de manutenção
Configure os jobs em maintenance.jobs:
maintenance:
enabled: true
jobs:
vacuum:
enabled: true
schedule: "0 2 * * *" # Diariamente às 2h
retentionHours: 168 # 7 dias (padrão)
optimize:
enabled: true
schedule: "0 3 * * 0" # Semanalmente aos domingos às 3h
optimizeZOrder:
enabled: false
schedule: "0 1 * * 6" # Sábados às 1h
describeHistory:
enabled: false
schedule: "0 6 * * *" # Diariamente às 6h
Cada schedule define quando o cluster executa trabalho intensivo em I/O contra o warehouse. Em janelas de pico de consultas, VACUUM e OPTIMIZE competem por largura de banda com Trino, Spark ou outros consumidores. Ajuste os horários para janelas de baixo uso.
O retentionHours do VACUUM está ligado ao tempo mínimo em que versões antigas precisam estar visíveis para time travel e leituras longas. Alterar a retenção sem alinhar com o uso real pode causar erros de leitura ou custo excessivo de storage.
VACUUM
Remove arquivos que não são mais referenciados pelo Delta Log:
VACUUM delta.`s3a://warehouse/delta/tabela` RETAIN 168 HOURS;
O período de retenção padrão é 7 dias (168 horas). Não reduza abaixo de 7 dias em produção — isso pode causar perda de dados para consultas em andamento.
OPTIMIZE
Compacta arquivos pequenos em arquivos maiores para melhorar a performance de leitura:
OPTIMIZE delta.`s3a://warehouse/delta/tabela`;
OPTIMIZE com Z-ORDER
Otimiza o layout dos dados para consultas com filtros específicos:
OPTIMIZE delta.`s3a://warehouse/delta/tabela` ZORDER BY (coluna1, coluna2);
Configuração do Spark
A imagem e os recursos definem o teto de CPU e memória que cada CronJob pode usar ao executar operações sobre tabelas grandes. Sintomas como OOMKilled ou execuções muito longas costumam levar ao aumento de limits. A tag deve corresponder ao Spark 4.0.2 e Delta 4.0.1 indicados na compatibilidade.
maintenance:
spark:
image:
repository: "registry.tecnisys.com.br/tdp-dev/images/spark"
tag: "4.0.2-0"
resources:
requests:
cpu: 1
memory: 2Gi
limits:
cpu: 2
memory: 4Gi
config:
"spark.hadoop.fs.s3a.endpoint": "http://<S3_ENDPOINT>.<NAMESPACE>.svc.cluster.local:9000"
"spark.hadoop.fs.s3a.path.style.access": "true"
Integrações
Esta página cobre os CronJobs de manutenção. A página Integrações — Delta Lake concentra as credenciais de armazenamento (S3/MinIO) e como Trino, Spark ou Airflow consomem as mesmas tabelas Delta.
Desinstalação
helm uninstall <RELEASE_NAME> -n <NAMESPACE>
Este comando remove todos os recursos do release (CronJobs, Jobs, ServiceAccount, RBAC). Este chart não cria PVCs.