Saltar para o conteúdo principal
Versão 3.0.0

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.

Para saber mais

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

ComponenteVersão
Spark4.0.0
Iceberg (Spark runtime)1.10.0
Scala2.13

Instalação

Terminal input
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.*.

note

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âmetroDescrição
enabledHabilitar ou desabilitar o CronJob
scheduleExpressão cron
retentionDaysDias de retenção para expireSnapshots
olderThanDaysIdade mínima para removeOrphanFiles
commandScript shell executado pelo container

Configuração do Spark

Este chart usa dois contextos de imagem distintos para o Spark. É importante não os confundir:

ChaveO que controlaFormato
spark.image.*Pods master/worker do subchart Sparkregistry + repository separados
maintenance.spark.image.*Containers dos CronJobs de manutençãorepository 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
note

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âmetroDescriçãoPadrão
maintenance.spark.enabledHabilitar dependência Sparktrue
maintenance.spark.image.repositoryImagem dos CronJobsregistry.tecnisys.com.br/community/images/bitnamilegacy/spark
maintenance.spark.image.tagTag da imagem4.0.0-debian-12-r0
maintenance.jobs.expireSnapshots.enabledHabilitar expire snapshotstrue
maintenance.jobs.expireSnapshots.retentionDaysDias de retenção7
maintenance.jobs.removeOrphanFiles.enabledHabilitar remoção de órfãostrue
maintenance.jobs.removeOrphanFiles.olderThanDaysIdade mínima dos órfãos3
maintenance.jobs.rewriteDataFiles.enabledHabilitar reescrita de dadosfalse

Desinstalação

Terminal input
helm uninstall <release> -n <namespace>