Vai al contenuto principale

Run Spark Submit (spark-submit) on Kubernetes

Un semplice lavoro Spark in Ilum funziona esattamente come uno inviato tramite lo standard scintilla-invio , ma con ulteriori miglioramenti per facilità d'uso, configurazione e integrazione con strumenti esterni.

È possibile utilizzare il file JAR con esempi di Spark dall'installazione locale di Spark o da qualsiasi file JAR personalizzato.

Di seguito è riportata una guida passo passo per configurare ed eseguire un semplice processo Spark utilizzando scintilla-invio on Ilum. This guide demonstrates the core configuration needed and shows how to monitor your job’s progress within the Ilum platform. For a complete overview of Ilum's architecture, check the Architecture Overview.


Quick Start (TL;DR)

How do I run a Spark job on Kubernetes with scintilla-invio?

To run a Spark job on Ilum (Kubernetes), ensure Java 17 and Spark are installed, upload your JAR, and run:

Quick Start: Spark Submit on K8s
./bin/spark-submit \
--padrone k8s://http://<ilum-core-address>:<ilum-core-port> \
--deploy-mode cluster \
--classe org.apache.spark.examples.SparkPi \
--conf spark.driver.memory=4g \
--conf spark.ilum.cluster=default \
--conf spark.kubernetes.container.image=ilum/spark:4.1.2 \
--conf spark.kubernetes.submission.waitAppCompletion=vero \
s3a://ilum-files/ilum/default/spark-examples_2.13-4.1.2.jar

Note: Replace <ilum-core-address> with your actual Ilum Core endpoint.

Step-by-Step Guide​

1. Prerequisites​

  • Assicurati che Java 17 sia installato e impostato correttamente nel tuo JAVA_HOME.
  • Download and extract the appropriate version of Apache Spark:
Download Spark 4
wget https://archive.apache.org/dist/spark/spark-4.1.2/spark-4.1.2-bin-hadoop3.tgz
tar -xzf spark-4.1.2-bin-hadoop3.tgz
cd spark-4.1.2-bin-hadoop3

2. Connect to Ilum​

If Ilum is deployed on Kubernetes, forward the service port to your local machine to make Ilum accessible at ospite locale:9888.

Forward Core
kubectl port-forward svc/ilum-core 9888:9888
Production Tip

Se stai comunicando dall'interno dello stesso cluster Kubernetes, puoi utilizzare gli indirizzi di servizio basati su DNS Kubernetes (ad esempio, http://ilum-core.namespace.svc.cluster.local) or expose services using Ingress.

3. Submit Your Spark Job​

Choose the submission method that best fits your workflow:

This method is suitable for quick local testing.

1. Upload your JAR File

For demonstration, we assume the JAR is uploaded manually to MinIO.

Locate the example JAR: examples/jars/spark-examples_2.13-4.1.2.jar

Upload it to MinIO (bucket ilum-files, path ilum/default/): s3a://ilum-files/ilum/default/spark-examples_2.13-4.1.2.jar

2. Submit via REST

Limitation

spark.ilum.pyRequisiti is not supported in this mode, as REST does not support PySpark submissions.

Run the following command:

REST Submit (Spark 4)
./bin/spark-submit \
--padrone spark://localhost:9888 \
--deploy-mode cluster \
--classe org.apache.spark.examples.SparkPi \
--conf spark.master.rest.enabled=vero \
--conf spark.ilum.cluster=default \
--conf spark.app.name=my-spark-job \
s3a://ilum-files/ilum/default/spark-examples_2.13-4.1.2.jar

Parameters:

ParameterDescrizione
--padroneIlum Core address via REST (e.g. spark://localhost:9888).
--conf spark.master.rest.enabled=veroEnables REST submission.
s3a://...JAR file path in MinIO.
Expected Output
Esecuzione di Spark utilizzando il protocollo di invio dell'applicazione REST.
25/03/12 12:58:01 INFO RestSubmissionClient: Invio di una richiesta per lanciare un'applicazione in spark://localhost:9888.
25/03/12 12:58:03 INFO RestSubmissionClient: Invio creato correttamente come 20250312-1158-qdnioef2rny. Stato di invio del polling...
25/03/12 12:58:03 INFO RestSubmissionClient: Invio di una richiesta per lo stato di presentazione 20250312-1158-qdnioef2rny in spark://localhost:9888.
25/03/12 12:58:03 INFO RestSubmissionClient: Stato del driver 20250312-1158-qdnioef2rny è ora INVIATO.
25/03/12 12:58:03 INFO RestSubmissionClient: Il driver è in esecuzione sul worker ILUM all'indirizzo ILUM_UI_ADDRESS/workloads/details/job/20250312-1158-qdnioef2rny.
25/03/12 12:58:03 INFO RestSubmissionClient: Il server ha risposto con CreateSubmissionResponse:
{
"action" : "CreateSubmissionResponse",
"serverSparkVersion" : "4.1.2",
"submissionId" : "20250312-1158-qdnioef2rny",
"successo" : vero
}
25/03/12 12:58:03 INFO ShutdownHookManager: Hook di spegnimento chiamato
25/03/12 12:58:03 INFO ShutdownHookManager: Eliminazione della directory /tmp/spark-fa2603be-488a-4e2a-9b7f-5e49825d379b

4. Monitor and Troubleshoot​

Using the Ilum UI:

  • Monitoraggio dell'avanzamento del processo: Track executors, memory usage, and job stages.
  • Review Results: Access logs and the integrated Spark History Server.
  • Troubleshoot: Diagnose failures by checking detailed executor logs.

For more details on monitoring metrics, see the Monitoring Guide.


Comparison: Classic spark-submit vs Ilum Approach​

Running Spark directly on Kubernetes requires significant administrative effort. Ilum simplifies this by automating infrastructure management.

Traditional Approach (Native Spark on K8s) vs Ilum​

CaratteristicaNative Spark on K8sIlum (Managed Spark)
SetupManual Docker image build & complex scintilla-invio args.Automated. Use existing JARs; Ilum handles images.
ConfigurazioneVerbose (Service Accounts, Volumes, Secrets).Simplified. Minimal args; configs are injected automatically.
ImmagazzinamentoManual Hadoop/S3 configuration per job.Integrated. Automatic credential injection for S3/GCS/Azure.
MonitoraggioCLI-based (kubectl logs), ephemeral.Centralized UI. Persistent logs, metrics, and history.
OsservabilitàBasic Spark UI (if exposed).Avanzato. Derivazione dei dati, detailed resource metrics.

Key Benefits of Ilum:

  1. Automatic Image Selection: Ilum selects a compatible Spark Docker image matching the cluster version.
  2. Advanced Observability: Ilum provides deep lineage observability and advanced monitoring capabilities.
  3. Simplified Configuration: Reduce scintilla-invio parameters by 3x-4x.
  4. Integrated Storage Access: Credentials for all configured storages are automatically injected.
  5. Instant Monitoring: Logs and metrics (CPU/RAM) appear in the Ilum UI immediately.

For a developer, this means less time fighting with infrastructure and error-prone configurations, and more time delivering business logic.

For advanced customization, refer to the official Spark documentation.