Integrações - Spark
Visão geral
O chart tdp-spark organiza integrações por meio de blocos de valores e ConfigMaps.
Jupyter e Airflow recebem configurações de cliente Spark, enquanto Delta Lake e Iceberg são blocos opcionais para cenários de formatos de tabela.
O ponto mais importante é que estes blocos não substituem a configuração Spark do ambiente.
Quando uma integração precisa de catálogos, bibliotecas, endpoint S3 ou metastore, complete também spark.sparkConf e tdp-spark.customSparkConfig.properties.
Padrão de configuração
Há três caminhos principais para configurar Spark e armazenamento:
| Bloco | Papel |
|---|---|
spark.sparkConf | Propriedades Spark e spark.hadoop.* repassadas ao runtime Spark |
tdp-spark.hadoopConfig | Valores renderizados como core-site.xml pelo wrapper TDP |
tdp-spark.customSparkConfig.properties | Conteúdo renderizado como spark-defaults.conf pelo wrapper TDP |
Use spark.sparkConf para propriedades do Spark, hadoopConfig para configurações Hadoop/S3A compartilhadas e customSparkConfig.properties para defaults adicionais de submissão.
Jupyter
Quando tdp-spark.integration.jupyter.enabled: true, o chart renderiza um ConfigMap de integração para ambientes Jupyter.
Esse ConfigMap contém um spark-defaults.conf com os pares definidos em tdp-spark.integration.jupyter.sparkConfig e um script de preparação de ambiente para notebooks.
Exemplo de habilitação:
helm upgrade --install <RELEASE_NAME> oci://registry.tecnisys.com.br/tdp/charts/tdp-spark -n <NAMESPACE> --set tdp-spark.integration.jupyter.enabled=true
Modelo de valores:
tdp-spark:
integration:
jupyter:
enabled: true
sparkConfig:
"spark.master": "spark://<SPARK_MASTER_SERVICE>.<NAMESPACE>.svc.cluster.local:7077"
"spark.serializer": "org.apache.spark.serializer.KryoSerializer"
"spark.driver.bindAddress": "0.0.0.0"
O valor de spark.master deve apontar para o Service do master Spark visto a partir do namespace onde o cliente Jupyter executa.
Se Jupyter e Spark estiverem em namespaces diferentes, valide DNS, NetworkPolicy e portas antes de submeter notebooks.
Airflow
O bloco tdp-spark.integration.airflow.sparkConfig guarda defaults de cliente Spark para ambientes Airflow.
Use esse bloco para manter valores como master, memória de driver, memória de executor e número de cores em um ponto versionado de configuração.
Modelo de valores:
tdp-spark:
integration:
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"
No Airflow, alinhe esses valores ao operador usado para submeter jobs Spark.
O chart Spark não substitui a configuração do DAG; fornece defaults e convenções para o cliente.
Object Storage S3/S3A
S3/S3A é o caminho usual para integrar Spark com armazenamento compatível, como Ozone S3 Gateway, MinIO ou outro endpoint S3.
As chaves podem aparecer em spark.sparkConf, tdp-spark.hadoopConfig ou tdp-spark.customSparkConfig.properties.
Modelo de propriedades em spark.sparkConf:
spark:
sparkConf:
"spark.hadoop.fs.s3a.endpoint": "http://<S3_ENDPOINT>:<S3_PORT>"
"spark.hadoop.fs.s3a.access.key": "<ACCESS_KEY>"
"spark.hadoop.fs.s3a.secret.key": "<SECRET_KEY>"
"spark.hadoop.fs.s3a.path.style.access": "true"
Credenciais e endpoints sensíveis devem ser tratados como valores de ambiente, ficheiro privado de valores ou Secret gerido pela plataforma.
Para boas práticas, consulte Segurança - Spark.
Delta Lake
O bloco tdp-spark.deltaLake é opcional e organiza valores relacionados a Delta Lake.
Habilitar esse bloco não altera automaticamente spark.sparkConf; forneça propriedades Spark, dependências e configurações de armazenamento conforme a imagem Spark usada no ambiente.
Modelo mínimo de ativação do bloco:
tdp-spark:
deltaLake:
enabled: true
Use tdp-spark.customSparkConfig.properties para declarar defaults adicionais quando a imagem exigir pacotes, extensões ou catálogos.
Iceberg
O bloco tdp-spark.iceberg é opcional e organiza valores relacionados a Apache Iceberg.
Quando usar Hive Metastore e S3/S3A, configure também o catálogo e o warehouse nas propriedades Spark.
Modelo de configuração:
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_SERVICE>.<NAMESPACE>.svc.cluster.local:9083"
"spark.sql.catalog.iceberg.warehouse": "s3a://<S3_BUCKET>/hive"
"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions"
Este exemplo é um modelo estrutural.
Valide bibliotecas, versão do Spark, catálogo e metastore conforme a imagem e os serviços instalados no ambiente.
Validação
Confirme os Services do release Spark:
kubectl -n <NAMESPACE> get svc -l app.kubernetes.io/instance=<RELEASE_NAME>
Quando a integração Jupyter estiver habilitada, verifique o ConfigMap gerado:
kubectl -n <NAMESPACE> get configmap tdp-spark-jupyter-integration
Para validar o acesso ao master a partir de outro namespace, execute um teste de resolução e porta com uma imagem de depuração aprovada no seu ambiente.
O endpoint esperado segue o formato spark://<SPARK_MASTER_SERVICE>.<NAMESPACE>.svc.cluster.local:7077.