Saltar para o conteúdo principal
Versão Next 🚧

Configuração do Spark

O que é o Apache Spark no TDP?

O Apache Spark é o motor de processamento de dados em larga escala do TDP.

Enquanto o Trino é otimizado para consultas SQL interativas, o Spark é otimizado para transformações de dados em batch e pipelines ETL — processar volumes massivos de dados, aplicar transformações complexas, e gravar o resultado de volta no storage.

No TDP Kubernetes, o Spark é usado de duas formas principais:

  1. Através do Airflow: pipelines agendados que processam dados com SparkSubmitOperator
  2. Através do JupyterHub: análises interativas em notebooks que conectam ao cluster Spark
Para saber mais

Consulte Apache Spark — Conceitos para uma visão completa da ferramenta, sua arquitetura e funcionamento.

Arquitetura master-worker

O Spark no TDP usa a arquitetura standalone (master + workers):

ComponenteFunção
MasterGerencia o cluster, aceita aplicações e distribui trabalho
WorkersExecutam os executors das aplicações Spark
History ServerInterface web para visualizar o histórico de execuções

O driver da aplicação Spark (quem envia o job) pode ser o Airflow, um notebook Jupyter, ou qualquer cliente que aponte para spark://<master>:7077.

Catálogos e formatos de tabela

O chart tdp-spark suporta blocos opcionais para Delta Lake e Iceberg — os dois formatos de tabela aberta do TDP.

Habilitar esses blocos (deltaLake.enabled, iceberg.enabled) configura as propriedades Spark necessárias para ler e escrever nesses formatos, usando o Hive Metastore como catálogo de tabelas.

Esta página descreve a configuração do Apache Spark no TDP Kubernetes. O chart tdp-spark empacota um chart upstream do Spark e adiciona configuração e integrações específicas da plataforma (Jupyter, Airflow, blocos opcionais Delta Lake e Iceberg).

Visão Geral

PropriedadeValor
Charttdp-spark
Versão do Spark4.0.0
Versão do Chart3.0.0
Registry (exemplos)oci://registry.tecnisys.com.br/tdp/charts/tdp-spark

Parâmetros principais (chart)

ParâmetroDescriçãoPadrão típico
spark.enabledHabilitar o Sparktrue
spark.image.repository / spark.image.tagImagem do SparkVer values.yaml do chart
spark.master.resourcesRecursos do masterVer values.yaml
spark.worker.replicaCountWorkers2
spark.worker.autoscaling.enabledHPA nos workersfalse
spark.historyServer.enabledHistory Servertrue
spark.sparkConfMapa de configuração SparkVer values.yaml
hadoopConfigValores para core-site.xml renderizados pelo chartVer values.yaml
customSparkConfig.propertiesConteúdo de spark-defaults.confVer values.yaml
integration.jupyter.enabledBloco de integração Jupytertrue
integration.airflow.enabledBloco de integração Airflowfalse
deltaLake.enabledBloco opcional Delta Lakefalse
iceberg.enabledBloco opcional Icebergfalse

O chart usa um bloco serviceAccount na raiz e spark.serviceAccount para a dependência upstream; ambos estão no values.yaml.

Instalação

Use o registry OCI da sua organização e substitua <release> e <namespace>:

Exemplo
helm install <release> oci://registry.tecnisys.com.br/tdp/charts/tdp-spark \
-n <namespace> --create-namespace

Ajuste recursos e réplicas via seu arquivo de values ou --set, conforme a necessidade do ambiente (desenvolvimento costuma usar menos CPU/memória que produção).

Configuração do Spark (sparkConf e arquivos)

Executor e driver (exemplo)

spark:
sparkConf:
"spark.executor.instances": "2"
"spark.executor.cores": "2"
"spark.executor.memory": "4g"
"spark.driver.memory": "2g"
"spark.driver.cores": "1"

Event log (exemplo local)

spark:
sparkConf:
"spark.eventLog.enabled": "true"
"spark.eventLog.dir": "file:///tmp/spark-events"
"spark.history.fs.logDirectory": "file:///tmp/spark-events"

Object storage (S3/S3A)

Credenciais e endpoints devem ser fornecidos pelo cliente (Secrets, values injetados por CI/CD, etc.). O chart aceita propriedades em:

  • spark.sparkConf (por exemplo spark.hadoop.fs.s3a.*)
  • hadoopConfig (por exemplo fs.s3a.*)
  • customSparkConfig.properties

Exemplo com placeholders:

spark:
sparkConf:
"spark.hadoop.fs.s3a.endpoint": "https://<s3-endpoint>"
"spark.hadoop.fs.s3a.path.style.access": "true"
"spark.hadoop.fs.s3a.impl": "org.apache.hadoop.fs.s3a.S3AFileSystem"
"spark.hadoop.fs.defaultFS": "s3a://<bucket-warehouse>"

Delta Lake e Iceberg

Os blocos deltaLake e iceberg no values.yaml são opcionais. Habilitá-los não aplica sozinho todas as propriedades Spark necessárias: use customSparkConfig.properties e spark.sparkConf para dependências e parâmetros exigidos pela sua versão do Spark e dos conectores.

Exemplo ilustrativo (Delta — ajuste pacotes/versões à sua imagem):

spark:
sparkConf:
"spark.sql.catalog.spark_catalog": "org.apache.spark.sql.delta.catalog.DeltaCatalog"
"spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension"
"spark.sql.warehouse.dir": "s3a://<bucket>/delta"

Exemplo ilustrativo (Iceberg com metastore Hive — substitua URI e warehouse):

spark:
sparkConf:
"spark.sql.catalog.iceberg": "org.apache.iceberg.spark.SparkCatalog"
"spark.sql.catalog.iceberg.type": "hive"
"spark.sql.catalog.iceberg.uri": "thrift://<hive-metastore-host>:9083"
"spark.sql.catalog.iceberg.warehouse": "s3a://<bucket>/hive"
"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions"

Horizontal Pod Autoscaling (workers)

spark:
worker:
autoscaling:
enabled: true
minReplicas: 2
maxReplicas: 10
targetCPU: 70
targetMemory: 80

O HPA exige Metrics Server no cluster.

Integrações (Jupyter e Airflow)

O chart renderiza ConfigMaps com configuração para outros componentes:

  • integration.jupyter.sparkConfig → defaults para ambientes Jupyter
  • integration.airflow.sparkConfig → defaults para clientes Spark no Airflow

Use o hostname e porta reais do master Spark no seu namespace (descubra com kubectl get svc -n <namespace>). Exemplo genérico:

integration:
jupyter:
enabled: true
sparkConfig:
"spark.master": "spark://<spark-master-service>.<namespace>.svc.cluster.local:7077"
airflow:
enabled: true
sparkConfig:
"spark.master": "spark://<spark-master-service>.<namespace>.svc.cluster.local:7077"
"spark.driver.memory": "1g"
"spark.executor.memory": "2g"
"spark.executor.cores": "1"

Habilitar apenas a integração Jupyter:

Exemplo
helm upgrade --install <release> oci://registry.tecnisys.com.br/tdp/charts/tdp-spark \
-n <namespace> \
--set integration.jupyter.enabled=true

Acesso e troubleshooting

kubectl -n <namespace> get svc -l app.kubernetes.io/instance=<release>
kubectl -n <namespace> get pods
kubectl -n <namespace> get events --sort-by=.lastTimestamp

Desinstalação

helm uninstall <release> -n <namespace>

Para a lista completa de parâmetros, consulte o values.yaml do chart.