Configuração do Spark
O que é o Apache Spark no TDP?
O Apache Spark é o motor de processamento distribuído usado no TDP para transformações de dados, pipelines ETL e cargas batch.
Enquanto o Trino é voltado a consultas SQL interativas, o Spark é mais adequado para processamentos longos, transformações complexas e gravação de resultados em armazenamento distribuído.
No TDP Kubernetes, o Spark normalmente é consumido por clientes como Airflow e Jupyter.
O Airflow agenda e dispara jobs, enquanto o Jupyter permite uso interativo em notebooks.
Consulte Apache Spark - Conceitos para uma visão completa da ferramenta, sua arquitetura e funcionamento.
Estrutura de valores (Helm)
O chart tdp-spark é um wrapper sobre o chart upstream do Spark. Os valores se distribuem em dois blocos:
spark:— valores do chart upstream: executor, driver, workers, imagens,sparkConf,sparkContext.tdp-spark:— valores do wrapper TDP:hadoopConfig,customSparkConfig.properties, integrações (Jupyter, Airflow, Delta Lake, Iceberg), ServiceAccount.
spark:
worker:
replicaCount: 2
tdp-spark:
hadoopConfig:
"fs.defaultFS": "s3a://warehouse"
Quando estiver em dúvida sobre qual bloco usar, consulte a seção Parâmetros principais desta página ou helm show values.
Arquitetura master-worker
O chart tdp-spark empacota e configura um chart upstream do Spark, adicionando configurações e integrações específicas da plataforma TDP.
A implantação segue a arquitetura standalone com master e workers:
| Componente | Função |
|---|---|
| Master | Gerencia o cluster Spark, recebe aplicações e distribui trabalho para os workers |
| Workers | Executam os executors das aplicações Spark |
| History Server | Disponibiliza a interface de histórico das execuções quando habilitado |
| ConfigMaps TDP | Renderizam core-site.xml, spark-defaults.conf e configurações de integração quando habilitados |
O ponto de submissão do cluster é o master Spark, normalmente acessado por clientes no formato spark://<SPARK_MASTER_SERVICE>:7077.
Drivers externos, como Airflow ou notebooks Jupyter, precisam alcançar esse endpoint para submeter jobs.
Visão geral
| Propriedade | Valor |
|---|---|
| Chart | tdp-spark |
| Versão do Spark | 4.0.2 |
| Versão do Chart | 3.0.1 |
| AppVersion do chart | 4.0.2 |
| Registry | oci://registry.tecnisys.com.br/tdp/charts/tdp-spark |
Páginas relacionadas
- Integrações - Spark: Jupyter, Airflow, Delta Lake, Iceberg e configurações S3/S3A usadas por integrações.
- Segurança - Spark: credenciais S3/S3A, placeholders, Secrets e boas práticas.
- Exposição externa - Spark: Ingress (com reverse proxy obrigatório) e Gateway API para a UI do Spark.
Pré-requisitos
Antes de instalar ou customizar o chart tdp-spark, confirme:
- Kubernetes 1.32+, Red Hat OpenShift 4.19+ ou Rancher Manager 2.10.x+.
- Helm 3.2.0+.
- StorageClass disponível para volumes persistentes.
- Registry OCI da Tecnisys acessível pelo ambiente de instalação.
- Quando usar S3/S3A: endpoint, credenciais, bucket e permissões disponíveis para os pods Spark.
- Quando usar Jupyter ou Airflow: conectividade desses clientes até o serviço master do Spark.
- Instalação
- Parâmetros principais
- Detalhes de configuração
- Acesso & Segurança
- Solução de problemas
- Desinstalação
Instalação
helm install <RELEASE_NAME> oci://registry.tecnisys.com.br/tdp/charts/tdp-spark -n <NAMESPACE> --create-namespace
Ajuste recursos, réplicas e configurações Spark pelo seu arquivo de valores ou por --set, conforme a necessidade do ambiente.
O chart é um wrapper: parte dos parâmetros pertence ao bloco spark do chart upstream e parte pertence ao bloco tdp-spark do wrapper TDP.
Parâmetros principais
| Parâmetro | Descrição | Observação |
|---|---|---|
spark.enabled | Habilita a implantação do Spark | Controla a dependência upstream |
spark.image.repository | Repositório da imagem Spark | Validar o valor efetivo no values.yaml da versão instalada |
spark.image.tag | Tag da imagem Spark | Alinhada à versão Spark empacotada pelo chart |
spark.master.resources | Recursos do master | Requests/limits do processo master |
spark.worker.replicaCount | Quantidade de workers | Use 2 como referência inicial |
spark.worker.autoscaling.enabled | Habilita HPA dos workers | Use false como referência inicial |
spark.historyServer.enabled | Habilita History Server | Use true como referência inicial |
spark.sparkConf | Mapa de propriedades Spark | Inclui propriedades spark.* e spark.hadoop.* |
tdp-spark.hadoopConfig | Valores de core-site.xml renderizados pelo wrapper | Usado para propriedades Hadoop/S3A |
tdp-spark.customSparkConfig.properties | Conteúdo de spark-defaults.conf renderizado pelo wrapper | Usado para defaults adicionais do Spark |
tdp-spark.integration.jupyter.enabled | Habilita configuração de integração com Jupyter | Renderiza ConfigMap quando habilitado |
tdp-spark.integration.airflow.enabled | Habilita bloco de configuração para Airflow | Guarda defaults de cliente Spark |
tdp-spark.deltaLake.enabled | Bloco opcional Delta Lake | Não altera spark.sparkConf automaticamente |
tdp-spark.iceberg.enabled | Bloco opcional Iceberg | Não altera spark.sparkConf automaticamente |
O chart usa um bloco tdp-spark.serviceAccount para templates do wrapper TDP e um bloco spark.serviceAccount para a dependência upstream.
Mantenha ambos alinhados quando precisar customizar ServiceAccount.
Configuração Spark
Use spark.sparkConf para propriedades que o próprio Spark deve receber, como executor, driver, event log e chaves spark.hadoop.*.
Use tdp-spark.hadoopConfig quando precisar renderizar core-site.xml pelo wrapper TDP.
Use tdp-spark.customSparkConfig.properties quando precisar renderizar conteúdo adicional de spark-defaults.conf.
A separação é importante: core-site.xml é lido pelo Hadoop antes de muitas propriedades do Spark, enquanto spark-defaults.conf define defaults de submissão e execução.
Para detalhes de credenciais e S3/S3A, consulte Segurança - Spark.
Armazenamento S3/S3A
S3/S3A é um ponto central de configuração do chart.
As propriedades podem ser configuradas por spark.sparkConf, por tdp-spark.hadoopConfig ou por tdp-spark.customSparkConfig.properties.
Na página geral, mantenha apenas a visão de alto nível: o Spark precisa de endpoint, credenciais e permissões para acessar o armazenamento.
Os exemplos completos e as boas práticas de credenciais ficam em Segurança - Spark.
Integrações e formatos de tabela
O chart possui blocos para integração com Jupyter e Airflow, além de blocos opcionais para Delta Lake e Iceberg.
Esses blocos organizam valores de configuração, mas Delta Lake e Iceberg não modificam automaticamente spark.sparkConf.
As propriedades Spark e dependências necessárias devem ser fornecidas em spark.sparkConf e tdp-spark.customSparkConfig.properties.
Consulte Integrações - Spark para exemplos e validações por integração.
Recursos, workers e autoscaling
O master coordena o cluster; os workers executam os executors.
Aumente spark.worker.replicaCount quando precisar de mais capacidade fixa de execução.
Use spark.worker.autoscaling.enabled apenas quando o cluster tiver suporte para HPA e métricas disponíveis.
- O Metrics Server deve estar instalado no cluster.
- Os recursos (
resources.requests.cpueresources.requests.memory) dos workers devem ser configurados para que o HPA funcione.
Exemplo de configuração de HPA para workers:
spark:
worker:
replicaCount: 2
autoscaling:
enabled: true
minReplicas: 2
maxReplicas: 10
targetCPU: 70
targetMemory: 80
resources:
requests:
cpu: "1"
memory: "2Gi"
limits:
cpu: "2"
memory: "4Gi"
Ajuste recursos de master, workers, driver e executors em conjunto.
Configurar muitos executors sem recursos suficientes nos workers pode gerar fila, falhas de agendamento ou pressão de memória.
Exposição externa
O chart suporta exposição externa via Ingress (suportado pelo subchart upstream Bitnami, configurado em spark.ingress.*) e via Gateway API (configurado em gatewayApi.spark.*).
Para que a UI do master Spark e os links de workers e aplicações funcionem corretamente através de um Ingress, o Spark Reverse Proxy nativo deve ser habilitado:
spark:
master:
configOptions: "-Dspark.ui.reverseProxy=true -Dspark.ui.reverseProxyUrl=http://<SPARK_HOSTNAME>"
worker:
configOptions: "-Dspark.ui.reverseProxy=true -Dspark.ui.reverseProxyUrl=http://<SPARK_HOSTNAME>"
sparkConf:
"spark.ui.reverseProxy": "true"
"spark.ui.reverseProxyUrl": "http://<SPARK_HOSTNAME>"
Sem essa configuração, os links "Back to Master" e os redirecionamentos de workers apontam para endereços internos do cluster, inacessíveis externamente.
Ao submeter aplicações, informe os mesmos parâmetros no spark-submit:
spark-submit \
--conf spark.ui.reverseProxy=true \
--conf spark.ui.reverseProxyUrl=http://<SPARK_HOSTNAME> \
...
Sem esses parâmetros, ao navegar pelas abas da Spark Web UI você é redirecionado para a home em vez das informações do job.
Consulte Exposição Externa — Spark para os exemplos completos de Ingress e Gateway API.
Acesso local
Para depuração ou acesso temporário sem Ingress, use port-forward para a UI do master Spark:
Liste os Services criados pelo release:
kubectl -n <NAMESPACE> get svc -l app.kubernetes.io/instance=<RELEASE_NAME>
Para depuração local, use port-forward para a UI do master Spark:
kubectl -n <NAMESPACE> port-forward svc/<RELEASE_NAME>-master-svc 8080:80
Solução de problemas
kubectl -n <NAMESPACE> get pods
kubectl -n <NAMESPACE> get events --sort-by=.lastTimestamp
Verifique primeiro se o master e os workers estão saudáveis.
Depois valide Services, configurações de S3/S3A e logs dos jobs submetidos pelo cliente usado no ambiente.
Desinstalação
helm uninstall <RELEASE_NAME> -n <NAMESPACE>
Para a lista completa de parâmetros, consulte os valores da versão instalada do chart.