Saltar para o conteúdo principal
Versão 3.0

Integrações - Spark

ChartVersion3.0.1TypeapplicationAppVersion4.0.2
CompatibilidadeKubernetes1.32+OpenShift4.19+Rancher2.10.x+

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 esses 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:

BlocoPapel
spark.sparkConfPropriedades Spark e spark.hadoop.* repassadas ao runtime Spark
tdp-spark.hadoopConfigValores renderizados como core-site.xml pelo wrapper TDP
tdp-spark.customSparkConfig.propertiesConteú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; ele 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, arquivo privado de valores ou Secret gerenciado 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"

Esse 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.