Configuração do Iceberg
O chart tdp-iceberg empacota jobs de manutenção para tabelas Apache Iceberg 1.10.0, usando Apache Spark como runtime.
Esta página foca a configuração do componente: o que os jobs fazem, como ativá-los e como o chart organiza o runtime Spark. Os detalhes de S3/MinIO, Hive Metastore e outras integrações ficam em Integrações — Iceberg.
O que é o Apache Iceberg e por que ele precisa de manutenção?
O Apache Iceberg é um formato de tabela aberta para grandes datasets, projetado para superar limitações do Hive.
Assim como o Delta Lake, o Iceberg mantém snapshots: versões imutáveis da tabela a cada operação de escrita. Com o uso contínuo, isso tende a acumular:
- snapshots antigos;
- arquivos órfãos;
- arquivos pequenos que prejudicam a performance de leitura.
O chart tdp-iceberg cria CronJobs Kubernetes para executar essas rotinas de manutenção de forma agendada.
Consulte Apache Iceberg — Conceitos para uma visão completa do formato, snapshots e casos de uso.
Visão geral
Este chart fornece três tipos de jobs de manutenção:
- Expire snapshots: remove snapshots antigos com base em política de retenção;
- Remove orphan files: remove arquivos que já não são referenciados pelos metadados;
- Rewrite data files: reescreve arquivos de dados para compactação e otimização.
Compatibilidade
| Componente | Versão |
|---|---|
| Spark | 4.0.0 |
| Iceberg (Spark runtime) | 1.10.0 |
| Scala | 2.13 |
Instalação
helm upgrade --install <release> \
oci://registry.tecnisys.com.br/tdp/charts/tdp-iceberg \
-n <namespace> --create-namespace
Pré-requisitos funcionais
Antes de ativar os jobs, o ambiente precisa de:
- acesso a um endpoint S3/MinIO;
- acesso ao Hive Metastore, se o catálogo Iceberg usar
type: hive; - configuração Spark coerente com o catálogo e o storage.
Esses pontos ficam detalhados em Integrações — Iceberg.
Jobs de manutenção
Os jobs são configurados sob maintenance.jobs.*.
Os exemplos abaixo mostram o formato esperado do comando. Ajuste catálogo, endpoint, warehouse, tabela e janelas de retenção conforme o seu ambiente.
Expire Snapshots
Remove snapshots antigos para liberar espaço de armazenamento e de metadados:
maintenance:
jobs:
expireSnapshots:
enabled: true
schedule: "0 2 * * *"
retentionDays: 7
command: |
spark-sql \
--packages org.apache.iceberg:iceberg-spark-runtime-4.0_2.13:1.10.0,org.apache.hadoop:hadoop-aws:3.3.4 \
--conf spark.sql.catalog.iceberg=org.apache.iceberg.spark.SparkCatalog \
--conf spark.sql.catalog.iceberg.type=hive \
--conf spark.sql.catalog.iceberg.uri=thrift://metastore.hive-metastore.svc.cluster.local:9083 \
--conf spark.sql.catalog.iceberg.warehouse=s3a://warehouse/hive \
--conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
-e "CALL iceberg.system.expire_snapshots(older_than => TIMESTAMP '$(date -d '7 days ago' '+%Y-%m-%d %H:%M:%S')');"
Remove Orphan Files
Remove arquivos órfãos que deixaram de ser referenciados por snapshots válidos:
maintenance:
jobs:
removeOrphanFiles:
enabled: true
schedule: "0 3 * * 0"
olderThanDays: 3
command: |
spark-sql \
--packages org.apache.iceberg:iceberg-spark-runtime-4.0_2.13:1.10.0,org.apache.hadoop:hadoop-aws:3.3.4 \
--conf spark.sql.catalog.iceberg=org.apache.iceberg.spark.SparkCatalog \
--conf spark.sql.catalog.iceberg.type=hive \
--conf spark.sql.catalog.iceberg.uri=thrift://metastore.hive-metastore.svc.cluster.local:9083 \
--conf spark.sql.catalog.iceberg.warehouse=s3a://warehouse/hive \
--conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
-e "CALL iceberg.system.remove_orphan_files(older_than => TIMESTAMP '$(date -d '3 days ago' '+%Y-%m-%d %H:%M:%S')');"
Rewrite Data Files
Reescreve e compacta arquivos de dados para melhorar a performance de leitura. Fica desabilitado por padrão por ser mais intensivo em recursos:
maintenance:
jobs:
rewriteDataFiles:
enabled: false
schedule: "0 1 * * 6"
command: |
spark-sql \
--packages org.apache.iceberg:iceberg-spark-runtime-4.0_2.13:1.10.0,org.apache.hadoop:hadoop-aws:3.3.4 \
--conf spark.sql.catalog.iceberg=org.apache.iceberg.spark.SparkCatalog \
--conf spark.sql.catalog.iceberg.type=hive \
--conf spark.sql.catalog.iceberg.uri=thrift://metastore.hive-metastore.svc.cluster.local:9083 \
--conf spark.sql.catalog.iceberg.warehouse=s3a://warehouse/hive \
--conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
-e "CALL iceberg.system.rewrite_data_files(table => 'iceberg.default.<nome-da-tabela>');"
Parâmetros dos jobs
| Parâmetro | Descrição |
|---|---|
enabled | Habilitar ou desabilitar o CronJob |
schedule | Expressão cron |
retentionDays | Dias de retenção para expireSnapshots |
olderThanDays | Idade mínima para removeOrphanFiles |
command | Script shell executado pelo container |
Configuração do Spark
Este chart usa dois contextos de imagem distintos para o Spark. É importante não os confundir:
| Chave | O que controla | Formato |
|---|---|---|
spark.image.* | Pods master/worker do subchart Spark | registry + repository separados |
maintenance.spark.image.* | Containers dos CronJobs de manutenção | repository com URL completa |
Subchart Spark (master/worker)
spark:
image:
registry: registry.tecnisys.com.br
repository: community/images/bitnamilegacy/spark
tag: 4.0.0-debian-12-r0
pullPolicy: IfNotPresent
Imagem dos containers de manutenção
maintenance:
spark:
enabled: true
image:
repository: "registry.tecnisys.com.br/community/images/bitnamilegacy/spark"
tag: "4.0.0-debian-12-r0"
pullPolicy: IfNotPresent
Estas duas configurações são independentes. Alterar spark.image.* não altera a imagem usada pelos CronJobs de manutenção.
Integrações
Para S3/MinIO, Hive Metastore, configuração do catálogo e uso a partir de Spark, Airflow ou Trino, consulte Integrações — Iceberg.
Parâmetros principais
| Parâmetro | Descrição | Padrão |
|---|---|---|
maintenance.spark.enabled | Habilitar dependência Spark | true |
maintenance.spark.image.repository | Imagem dos CronJobs | registry.tecnisys.com.br/community/images/bitnamilegacy/spark |
maintenance.spark.image.tag | Tag da imagem | 4.0.0-debian-12-r0 |
maintenance.jobs.expireSnapshots.enabled | Habilitar expire snapshots | true |
maintenance.jobs.expireSnapshots.retentionDays | Dias de retenção | 7 |
maintenance.jobs.removeOrphanFiles.enabled | Habilitar remoção de órfãos | true |
maintenance.jobs.removeOrphanFiles.olderThanDays | Idade mínima dos órfãos | 3 |
maintenance.jobs.rewriteDataFiles.enabled | Habilitar reescrita de dados | false |
Desinstalação
helm uninstall <release> -n <namespace>